如何为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>
如何将元素名称string
更改为username
?最好还stringArray
更有意义的事情?我的方法完全错了吗?
答案 0 :(得分: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):
# (...)
此外,如果您需要数组非空,则还需要在Array内部使用Unicode(min_len = 1,min_occurs = 1,nillable = False)。即:
SomeArrayType = M(Array(M(Unicode), type_name='SomeArrayType',
member_name='username'))