[英]query wsdl with python zeep module
我正在嘗試使用 Python Zeep 發送 SOAP 請求。
這是我的代碼:
from zeep import Client
url = 'localhost:8081/ws/?wsdl'
def smev_grr():
client = Client(url)
itSystem = '00000000'
nodeId = 'my_node'
factory = client.type_factory('ns1')
specificQuery = client.get_type('ns1:QueryTypeCriteria')
with client.settings():
response = client.service.Get(itSystem, nodeId, specificQuery('messageTypeCriteria'))
print(response.text)
我不確定如何提供 QueryTypeCriteria 並將 messageTypeCriteria 包含在所需的請求類型中。 使用上面的代碼,我收到以下錯誤:
zeep.exceptions.Fault: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 286; cvc-complex-type.2.4.b: The content of element 'specificQuery' is not complete. One of '{"urn://x-artefacts-smev-gov-ru/services/service-adapter/types":messageTypeCriteria}' is expected.
使用print(client.wsdl.dump())
顯示以下內容:
Prefixes:
xsd: http://www.w3.org/2001/XMLSchema
ns0: urn://x-artefacts-smev-gov-ru/services/service-adapter/types/faults
ns1: urn://x-artefacts-smev-gov-ru/services/service-adapter/types
Global elements:
ns0:SyncFault(ns0:SyncFault)
ns0:SystemFault(ns0:SystemFault)
ns0:ValidationFault(ns0:ValidationFault)
ns1:AttachmentHeaderList(AttachmentHeader: ns1:AttachmentHeaderType[])
ns1:BusinessProcessMetadata(ns1:BusinessProcessMetadata)
ns1:ClientMessage(ns1:ClientMessage)
ns1:ErrorMessage(ns1:ErrorMessage)
ns1:FindMessageQuery(ns1:FindMessageQuery)
ns1:Message(ns1:Message)
ns1:MessagePrimaryContent(_value_1: ANY)
ns1:MessageQuery(ns1:MessageQuery)
ns1:MessageResult(itSystem: xsd:string, MessageId: xsd:string)
ns1:PersonalSignature(ns1:XMLDSigSignatureType)
ns1:QueryMessage(ns1:QueryMessageType)
ns1:QueryResult(ns1:AdapterMessage)
ns1:QueryResultList(QueryResult: ns1:AdapterMessage[])
ns1:RequestContent(ns1:RequestContentType)
ns1:RequestMessage(ns1:RequestMessageType)
ns1:RequestMetadata(ns1:RequestMetadataType)
ns1:ResponseContent(ns1:ResponseContentType)
ns1:ResponseMessage(ns1:ResponseMessageType)
ns1:ResponseMetadata(ns1:ResponseMetadataType)
ns1:StatusMessage(ns1:StatusMessage)
ns1:SyncRequest(ns1:SyncRequest)
ns1:SyncResponse(ns1:SyncResponse)
ns1:itSystem(xsd:string)
ns1:smevMetadata(ns1:SmevMetadata)
Global types:
xsd:anyType
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
ns0:Fault(code: xsd:string, description: xsd:string)
ns0:SyncFault(code: xsd:string, description: xsd:string)
ns0:SystemFault(code: xsd:string, description: xsd:string)
ns0:ValidationFault(code: xsd:string, description: xsd:string)
ns1:AdapterMessage(smevMetadata: ns1:SmevMetadata, Message: ns1:Message)
ns1:ArchiveType(File: ns1:FileType[])
ns1:AttachmentHeaderType(Id: xsd:string, filePath: xsd:string, passportId: xsd:string, SignaturePKCS7: xsd:base64Binary, TransferMethod: xsd:string, ReusableAttachment: xsd:boolean, Archive: ns1:ArchiveType)
ns1:BusinessProcessMetadata(_value_1: ANY[])
ns1:ClientIdCriteria
ns1:ClientMessage(itSystem: xsd:string, replyToQueue: xsd:string, RequestMessage: ns1:RequestMessageType, ResponseMessage: ns1:ResponseMessageType, QueryMessage: ns1:QueryMessageType)
ns1:Content(MessagePrimaryContent: ns1:MessagePrimaryContent, PersonalSignature: ns1:XMLDSigSignatureType, AttachmentHeaderList: ns1:AttachmentHeaderList)
ns1:CreateGroupIdentity(FRGUServiceCode: xsd:string, FRGUServiceDescription: xsd:string, FRGUServiceRecipientDescription: xsd:string)
ns1:DynamicRoutingType(DynamicValue: xsd:string[])
ns1:ErrorMessage(messageType: xsd:string, statusMetadata: ns1:StatusMetadataType, status: xsd:string, details: xsd:string, timestamp: xsd:dateTime, type: xsd:string, fault: ns0:Fault)
ns1:ErrorType
ns1:FileType(name: xsd:string, passportId: xsd:string)
ns1:FindMessageQuery(itSystem: xsd:string, specificQuery: ns1:FindTypeCriteria)
ns1:FindTypeCriteria(messagePeriodCriteria: ns1:MessageIntervalCriteria, messageClientIdCriteria: ns1:MessageClientIdCriteria, MessageCountToReturn: xsd:int, MessageOffset: xsd:int)
ns1:IdentifierRoutingType(IdentifierValue: xsd:string[])
ns1:LinkedGroupIdentity(refClientId: xsd:string, refGroupId: xsd:string)
ns1:Message(messageType: xsd:string)
ns1:MessageClientIdCriteria(clientId: xsd:string, clientIdCriteria: xsd:string)
ns1:MessageIntervalCriteria(from: xsd:dateTime, to: xsd:dateTime)
ns1:MessageQuery(itSystem: xsd:string, nodeId: xsd:string, routerExtraQueue: xsd:string, specificQuery: ns1:QueryTypeCriteria)
ns1:Metadata(clientId: xsd:string)
ns1:QueryMessageType(messageType: xsd:string, clientId: xsd:string, nodeId: xsd:string, queryType: xsd:string, queryFilter: xsd:string, queryRootTag: xsd:string)
ns1:QueryTypeCriteria(messageTypeCriteria: xsd:string)
ns1:RegistryRecordRoutingType(RecordId: xsd:int, UseGeneralRouting: xsd:boolean, DynamicRouting: ns1:DynamicRoutingType, IdentifierRouting: ns1:IdentifierRoutingType)
ns1:RegistryRoutingType(RegistryRecordRouting: ns1:RegistryRecordRoutingType[])
ns1:Reject(code: xsd:string, description: xsd:string)
ns1:RejectCode
ns1:RequestContentType(content: ns1:Content, originalContent: xsd:string)
ns1:RequestMessageType(messageType: xsd:string, RequestMetadata: ns1:RequestMetadataType, RequestContent: ns1:RequestContentType)
ns1:RequestMetadataType(clientId: xsd:string, linkedGroupIdentity: ns1:LinkedGroupIdentity, createGroupIdentity: ns1:CreateGroupIdentity, nodeId: xsd:string, eol: xsd:dateTime, testMessage: xsd:boolean, TransactionCode: xsd:string, BusinessProcessMetadata: ns1:BusinessProcessMetadata, RoutingInformation: ns1:RoutingInformationType)
ns1:ResponseContentType(content: ns1:Content, rejects: ns1:Reject[], status: ns1:Status, originalContent: xsd:string)
ns1:ResponseMessageType(messageType: xsd:string, ResponseMetadata: ns1:ResponseMetadataType, ResponseContent: ns1:ResponseContentType)
ns1:ResponseMetadataType(clientId: xsd:string, replyToClientId: xsd:string, replyTo: xsd:string)
ns1:RoutingInformationType(DynamicRouting: ns1:DynamicRoutingType, IdentifierRouting: ns1:IdentifierRoutingType, RegistryRouting: ns1:RegistryRoutingType)
ns1:SmevMetadata(MessageId: xsd:string, ReferenceMessageID: xsd:string, TransactionCode: xsd:string, OriginalMessageID: xsd:string, Sender: xsd:string, Recipient: xsd:string, ReplyTo: xsd:string, SendingDate: xsd:dateTime)
ns1:Status(code: xsd:string, description: xsd:string, parameter: {key: xsd:string, value: xsd:string}[])
ns1:StatusMessage(messageType: xsd:string, statusMetadata: ns1:StatusMetadataType, status: xsd:string, details: xsd:string, timestamp: xsd:dateTime)
ns1:StatusMessageCategory
ns1:StatusMetadataType(clientId: xsd:string, originalClientId: xsd:string)
ns1:SyncRequest(itSystem: xsd:string, RequestMessage: ns1:RequestMessageType)
ns1:SyncResponse(smevMetadata: ns1:SmevMetadata, Message: ns1:Message)
ns1:TransferMethodType
ns1:TypeCriteria
ns1:XMLDSigSignatureType(_value_1: ANY)
Bindings:
Soap11Binding: {urn://x-artefacts-smev-gov-ru/services/service-adapter}SMEVServiceAdapterEndpointBinding
Service: SMEVServiceAdapterService
Port: SMEVServiceAdapterEndpoint (Soap11Binding: {urn://x-artefacts-smev-gov-ru/services/service-adapter}SMEVServiceAdapterEndpointBinding)
Operations:
Find(itSystem: xsd:string, specificQuery: ns1:FindTypeCriteria) -> QueryResult: ns1:AdapterMessage[]
Get(itSystem: xsd:string, nodeId: xsd:string, routerExtraQueue: xsd:string, specificQuery: ns1:QueryTypeCriteria) -> smevMetadata: ns1:SmevMetadata, Message: ns1:Message
Send(itSystem: xsd:string, replyToQueue: xsd:string, RequestMessage: ns1:RequestMessageType, ResponseMessage: ns1:ResponseMessageType, QueryMessage: ns1:QueryMessageType) -> itSystem: xsd:string, MessageId: xsd:string
很明顯,我不知道如何使用 factory 和 get_type 方法構建 object。 請幫幫我。 謝謝。
調用該操作的方法簽名如下所示:
Get(itSystem: xsd:string, nodeId: xsd:string, routerExtraQueue: xsd:string, specificQuery: ns1:QueryTypeCriteria) -> smevMetadata: ns1:SmevMetadata, Message: ns1:Message
它有一個額外的參數,我在你的電話中沒有看到。 調用應該是:
response = client.service.Get(itSystem, nodeId, routerExtraQueue, specificQuery('messageTypeCriteria'))
並且您還需要為routerExtraQueue
提供一個值。
那應該行得通。
如果沒有,那么您可以通過以下方式解決問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.