gpt4 book ai didi

python - spine - 从复杂类型继承且派生类实现 xml 属性时出错

转载 作者:太空宇宙 更新时间:2023-11-03 16:38:49 25 4
gpt4 key购买 nike

我需要实现现有的 WSDL。我尝试继承我的复杂类型类。但如果派生类实现 xml 属性,我会收到错误。如果派生类未实现 xml 属性,则不会出现错误。

我是不是做错了什么?(spyne版本'2.12.11',python 2.7.9)

错误:

No handlers could be found for logger "spyne.interface.xml_schema"
Traceback (most recent call last):
File "/home/leto/workspace/spyne_test/inherited_classes.py", line 32, in <module>
out_protocol=Soap12())
File "/usr/local/lib/python2.7/dist-packages/spyne/application.py", line 113, in __init__
self.in_protocol.set_app(self)
File "/usr/local/lib/python2.7/dist-packages/spyne/protocol/xml.py", line 368, in set_app
xml_schema.build_validation_schema()
File "/usr/local/lib/python2.7/dist-packages/spyne/interface/xml_schema/_base.py", line 223, in build_validation_schema
self.validation_schema = etree.XMLSchema(etree.parse(f))
File "xmlschema.pxi", line 90, in lxml.etree.XMLSchema.__init__ (src/lxml/lxml.etree.c:175129)
lxml.etree.XMLSchemaParseError: Element '{http://www.w3.org/2001/XMLSchema}complexType': The content is not valid. Expected is (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))., line 10

代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from spyne.model.primitive import Unicode
from spyne.server.wsgi import WsgiApplication
from spyne.protocol.soap.soap12 import Soap12
from spyne.model.complex import XmlAttribute, ComplexModel
from spyne import Application, rpc, ServiceBase


ADDRESS = '127.0.0.1'
PORT = 8070


class DeviceEntity(ComplexModel):
token = XmlAttribute(Unicode, use='required')


class DigitalInput(DeviceEntity):
# IdleState = Unicode
IdleState = XmlAttribute(Unicode)


class Service(ServiceBase):

@rpc(_returns=DigitalInput, _body_style='bare')
def GetDigitalInput(ctx):
return DigitalInput()

application = Application([Service], 'some_tns',
in_protocol=Soap12(validator='lxml'),
out_protocol=Soap12())

wsgi_application = WsgiApplication(application)


if __name__ == '__main__':
from wsgiref.simple_server import make_server
server = make_server(ADDRESS, PORT, wsgi_application)
server.serve_forever()

这是我尝试实现的 WSDL 的一部分:

<xs:complexType name="DeviceEntity">
<xs:annotation>
<xs:documentation>
Base class for physical entities like inputs and outputs.
</xs:documentation>
</xs:annotation>
<xs:attribute name="token" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Unique identifier referencing the physical entity.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>

<xs:complexType name="DigitalInput">
<xs:complexContent>
<xs:extension base="tt:DeviceEntity">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
<!-- first ONVIF then Vendor -->
</xs:sequence>
<xs:attribute name="IdleState" type="xs:string">
<xs:annotation>
<xs:documentation>Indicate the Digital IdleState status.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>

最佳答案

此错误的修复现已合并到 2.13 主线。

参见:https://github.com/arskom/spyne/pull/493

关于python - spine - 从复杂类型继承且派生类实现 xml 属性时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com