Я использую ZSI 2.1 и работаю из файла wsdl, в котором указано сообщение «postAppStatusResponse» типа «appStatusResponse», которое определяется как:
<xsd:complexType name="appStatusResponse">
<xsd:sequence>
<xsd:element name="response" type="tns:webServiceResponse" minOccurs="1" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
и «webServiceResponse» выглядит следующим образом:
<xsd:complexType name="webServiceResponse">
<xsd:sequence>
<xsd:element name="responseCode" type="xsd:long"/>
<xsd:element name="responseMessage" type="xsd:string"/>
<xsd:element name="exceptionCode" type="xsd:long"/>
<xsd:element name="exceptionMessage" type="xsd:string" nillable="true" />
<xsd:element name="transactionIdentifier" type="xsd:long"/>
<xsd:element name="traceIdentifier" type="xsd:string"/>
<xsd:element name="transactionTimestamp" type="xsd:dateTime" nillable="true" />
</xsd:sequence>
</xsd:complexType>
Чтобы отправить сообщение postAppStatusResponse, мне, очевидно, нужно заполнить его структурами webServiceResponse и appStatusResponse. Тем не менее, класс, созданный для сообщения postAppStatusResponse, не содержит ничего, чтобы поддержать это. Файл сгенерированных wsdl2py типов включает в себя классы appStatusResponse_Def и webServiceResponse_Def, но я не смог понять, как их использовать для генерации того, что мне нужно.
Сгенерированное сообщение postAppStatusResponse выглядит так:
_postAppStatusResponseTypecode = Struct(pname=("http://cig.jpmchase.net/20110218/card/acq/","postAppStatusResponse"), ofwhat=[ns0.appStatusResponse_Def(pname="postAppStatusResponse", aname="_postAppStatusResponse", typed=False, encoded=None, minOccurs=1, maxOccurs=1, nillable=True)], pyclass=None, encoded="http://cig.jpmchase.net/20110218/card/acq/")
class postAppStatusResponse:
typecode = _postAppStatusResponseTypecode
__metaclass__ = pyclass_type
def __init__(self, **kw):
"""Keyword parameters:
postAppStatusResponse -- part postAppStatusResponse
"""
self._postAppStatusResponse = kw.get("postAppStatusResponse")
postAppStatusResponse.typecode.pyclass = postAppStatusResponse
dir () для postAppStatusResponse:
['PostAppStatusResponse', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__metaclass__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_postAppStatusResponse', 'get_element_postAppStatusResponse', 'new_postAppStatusResponse', 'set_element_postAppStatusResponse', 'typecode']
и dir () для postAppStatusResponse._postAppStatusResponse:
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
Я сгенерировал файлы, используя "wsdl2py --complexType", и смог использовать включенные функции "get_element _..." для извлечения данных сообщения запроса без каких-либо проблем. Я также написал другие веб-сервисы ZSI, которые без проблем возвращают более простые сообщения. Но этот ... Я перепробовал много разных подходов к отправке этого сообщения и не нашел того, который работает.
Конечно, ZSI существует, чтобы упростить подобные вещи? Может ли кто-нибудь помочь мне с тем, что мне здесь не хватает? (Я пытался избавить вас от лишних данных из длинных XML-файлов и списков кодов, но, конечно, могу предоставить их по запросу.)