我正在尝试使用多种对象类型来执行SOAP请求 信封部分包含这些信息
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:mes="mesdefinition"
xmlns:dat="datdefinition">
在我的例子中,我的方法GetMembers放入两个名为as的参数:
寻呼
MembersFilter
其定义为
<xsd:element xmlns:q1="datdefinition" minOccurs="0" name="MembersFilter"
nillable="true" type="q1:ArrayMemberSvFilter"/>
<xsd:element xmlns:q2="mesdefinition" minOccurs="0" name="Paging"
nillable="true" type="q2:ListPag"/>
在请求中定义Paging元素并不困难,它只包含两个整数元素:
<xsd:complexType name="ListPag">
<xsd:sequence>
<xsd:element name="PageIdx" type="xsd:int"/>
<xsd:element name="PageSz" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
问题是MembersFilter一个。模式包含数组定义
<xsd:schema xmlns:tns="datdefinition" elementFormDefault="qualified" targetNamespace="datdefinition">
<xsd:complexType name="ArrayMemberSvFilter">
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="MemberSvFilter" nillable="true" type="tns:MemberSvFilter"/>
</xsd:sequence>
</xsd:complexType>
然后是MemberSvFilter定义
<xsd:complexType name="MemberSvFilter">
<xsd:complexContent mixed="false">
<xsd:extension xmlns:q123="mesdefinition" base="q123:APIFilterBase">
<xsd:sequence/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
MemberSvFilter有几个扩展名:在我的方法中有用的扩展名是MemIDFilter(它只允许检索引用传递的ID的结果),定义为
<xsd:complexType name="MemIDFilter">
<xsd:complexContent mixed="false">
<xsd:extension base="tns:MemberSvFilter">
<xsd:sequence>
<xsd:element name="MemID" type="xsd:int"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
如何使用复杂类型正确构造SOAP正文?我试过这种方式
<mes:GetMembers>
<dat:MemIDFilter>1234</dat:MemIDFilter>
<mes:Paging>
<mes:PageIdx>0</mes:PageIdx> <!--ok-->
<mes:PageSz>30</mes:PageSz> <!--ok-->
</mes:Paging>
</mes:GetMembers>
但是响应给了我整个成员数组,不仅仅是我想要的成员1234的结果。
更新: 我正在使用SoapUI来检索请求的原始XML结构。这是:
<mes:GetMembers>
<mes:MembersFilter>
<dat:MemberSvFilter/>
</mes:MembersFilter>
<mes:Paging>
<mes:PageIdx>?</mes:PageIdx>
<mes:PageSz>?</mes:PageSz>
</mes:Paging>
</mes:GetMembers>