具有annidate复杂类型的SOAP wsdl请求

时间:2017-01-29 20:47:42

标签: xml soap wsdl xml-namespaces

我正在尝试使用多种对象类型来执行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>

0 个答案:

没有答案