Выявление простых типов в WSDL с помощью Spyne
Мы пытаемся создать SOAP-приложение с помощью Django + Spyne, создавая определенные требуемые конечные точки. Открытый WSDL должен точно соответствовать заранее определенному XML файлу, включая пользовательские определения простых типов. В настоящее время нам не удается показать определения простых типов в нашем WSDL, все остальное точно соответствует.
Простым примером является следующее приложение hello world:
import logging
logging.basicConfig(level=logging.DEBUG)
from spyne import Application, rpc, ServiceBase, \
Integer, Unicode, SimpleModel
from spyne import Iterable
from spyne.protocol.xml import XmlDocument
from spyne.protocol.soap import Soap11
from spyne.interface.wsdl import Wsdl11
from spyne.server.django import DjangoApplication
from django.views.decorators.csrf import csrf_exempt
class IdType(SimpleModel):
__type_name__ = "IdType"
__namespace__ = 'spyne.examples.hello'
__extends__ = Unicode
class Attributes(Unicode.Attributes):
out_type = 'TxnIdType'
class HelloWorldService(ServiceBase):
@rpc(IdType, Integer, _returns=Iterable(Unicode))
def say_hello(ctx, TxnIdType, times):
for i in range(times):
yield 'Hello, %s' % TxnIdType
application = Application([HelloWorldService],
tns='spyne.examples.hello',
interface = Wsdl11(),
in_protocol=Soap11(validator = 'lxml'),
# out_protocol=XmlDocument(validator='schema')
out_protocol=Soap11()
)
hello_app = csrf_exempt(DjangoApplication(application))
Что дает следующий WSDL:
Как видите, simpleType "IdType" не отображается. Есть ли способ заставить Spyne отразить эти теги? В настоящее время наш выходной WSDL не проходит необходимую проверку, поскольку не распознает пользовательские simpleTypes.
Наш ожидаемый результат следующий:
<simpleType name="IdType">
<restriction base="xsd:string">
<xsd:maxLength value="10"/>
</restriction>
</simpleType>
Любая помощь будет высоко оценена.
Спасибо!
Так ты этот парень, верно? https://github.com/arskom/spyne/discussions/681
Вставляю свой ответ и здесь. Надеюсь, на этот раз вы не откажетесь ответить.
=================
Читали ли вы это? http://spyne.io/docs/2.10/manual/03_types.html#customization
IdType = Unicode(10, type_name='IdType')
class HelloWorldService(ServiceBase):
@rpc(IdType, Integer, _returns=Iterable(Unicode))
def say_hello(ctx, TxnIdType, times):
for i in range(times):
yield 'Hello, %s' % TxnIdType
Создает ли это нужный вам wsdl?