为给定请求构建服务

时间:2014-04-15 14:28:15

标签: python soap spyne

我对SOAP框架比较陌生,并且一直在阅读Spynes文档并尝试构建一个接受以下请求的服务:

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://..." xmlns:xsi=http:/..." xmlns:xsd="http://...">
<SOAP-ENV:Body>
    <modifyRequest returnData="everything" xmlns="urn:...">
      <attr ID="..."/>
      <data>
      </data>
    </modifyRequest>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我已经阅读了文档但是还没有看到足够复杂的例子来弄清楚如何组合起来处理这个问题。必须为ID属性处理<attr ID="..."/>标记,并且<data>标记包含一些不同的附加xml集合。我理解它更好地正式定义服务但是现在我希望使用anyXML(?)来接受标签中的任何内容。我需要接受并处理ID属性及其数据标记中包含的xml有效负载。

我很感激任何指导, 感谢。

1 个答案:

答案 0 :(得分:0)

以下是您的工作方式:

NS = 'urn:...'

class Attr(ComplexModel):
    __namespace__ = NS
    _type_info = [
        ('ID', XmlAttribute(UnsignedInteger32)),
    ]

class ModifyRequest(ComplexModel):
    __namespace__ = NS
    _type_info = [
        ('returnData', XmlAttribute(Unicode(values=['everything', 'something', 'anything', 'etc']))),
        ('attr', Attr),
        ('data', AnyXml),
    ]


class SomeService(ServiceBase):
    @rpc(ModifyRequest, _body_style='bare')
    def modifyRequest(ctx, request):
        pass

这需要Spyne 2.11,_body_style='bare'在2.10及更早版本中存在问题。