0

我对 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>

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

我将不胜感激任何指导,谢谢。

4

1 回答 1

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 及更早版本中存在问题。

于 2014-04-30T09:54:37.507 回答