簡體   English   中英

使用 python zeep 模塊查詢 wsdl

[英]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提供一個值。

那應該行得通。

如果沒有,那么您可以通過以下方式解決問題:

  • 使用zeep 歷史插件查看您的客戶端嘗試發送的 SOAP 消息;
  • 將您的 WSDL 輸入到 SoapUI以成功調用服務並查看 SOAP 消息的外觀;
  • tweek 您的代碼,直到您從 zeep 收到與來自 SoapUI 的消息等效的消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM