0

如何为 Spyne 编写一个请求处理程序来处理这样的 SOAP 请求:

<getUsers>
  <users>
    <username>foo</username>
    <username>bar</username>
    ...
  </users>
</getUsers>

我试过这个:

@rpc(Array(Unicode.customize(type_name='username'), min_occurs=1, nillable=False))
def getUsers(ctx, users):
    stuff

但它会产生这样的模式:

  <xs:complexType name="getUsers">
    <xs:sequence>
      <xs:element name="users" type="tns:stringArray"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="stringArray">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="string" nillable="true" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

如何将元素名称更改stringusername?最好也stringArray变成更有意义的东西?我的方法完全错误吗?

4

1 回答 1

0

2.10:

SomeArrayType = Array(Unicode, min_occurs=1, 
                               nillable=False, type_name='SomeArrayType')
SomeArrayType._type_info['username'] = SomeArrayType._type_info['string']
del SomeArrayType._type_info['string']

@rpc(SomeArrayType)
def some_call(ctx, some_array):
    # (...)

2.11:

from spyne import Mandatory as M
SomeArrayType = M(Array(Unicode, type_name='SomeArrayType',
                                                member_name='username'))

@rpc(SomeArrayType)
def some_call(ctx, some_array):
    # (...)

此外,如果您需要数组不为空,则还需要在数组中使用 Unicode(min_len=1, min_occurs=1, nillable=False)。IE:

SomeArrayType = M(Array(M(Unicode), type_name='SomeArrayType',
                                                member_name='username'))
于 2014-05-20T01:54:17.260 回答