Как передать массив структур в мыльном запросе в качестве аргумента?

Я пытаюсь использовать веб-сервис SOAP, созданный в ColdFusion. Часть запроса WSDL для сервиса выглядит следующим образом:

<wsdl:message name="submitTicketWithExtraInfoRequest">
<wsdl:part name="sUserLdapAlias" type="xsd:string"></wsdl:part>
<wsdl:part name="sIssueDetails" type="xsd:string"></wsdl:part>
<wsdl:part name="sIssueSummary" type="xsd:string"></wsdl:part>
<wsdl:part name="sDeadlineReason" type="xsd:string"></wsdl:part>
<wsdl:part name="nRelatedTo" type="xsd:string"></wsdl:part>
<wsdl:part name="nPriorityLevel" type="xsd:string"></wsdl:part>
<wsdl:part name="nSegmentid" type="xsd:string"></wsdl:part>
<wsdl:part name="sSubmitterPhone" type="xsd:string"></wsdl:part>
<wsdl:part name="sCC" type="xsd:string"></wsdl:part>
<wsdl:part name="sCoSubmitter" type="xsd:string"></wsdl:part>
<wsdl:part name="sDeadline" type="xsd:string"></wsdl:part>
<wsdl:part name="arURLReference" type="impl:ArrayOf_tns1_URLReference"></wsdl:part>
</wsdl:message>

<complexType name="ArrayOf_tns1_URLReference">
    <complexContent>
         <restriction base="soapenc:Array">
             <attribute ref="soapenc:arrayType" wsdl:arrayType="tns1:URLReference[]"/>
         </restriction>
    </complexContent>
</complexType>

<complexType name="URLReference">
     <sequence>
         <element name="sURLReferenceComment" nillable="true" type="xsd:string"/>
         <element name="sURLReferenceURL" nillable="true" type="xsd:string"/>
     </sequence>
</complexType>

Я использую SoapUI для генерации запроса, который в настоящее время выглядит следующим образом:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://some url/webService/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
   <soapenv:Header/>
   <soapenv:Body>
      <int:submitTicketWithExtraInfo soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <sUserLdapAlias xsi:type="xsd:string">?</sUserLdapAlias>
         <sIssueDetails xsi:type="xsd:string">?</sIssueDetails>
         <sIssueSummary xsi:type="xsd:string">?</sIssueSummary>
         <sTroubleshooting xsi:type="xsd:string">?</sTroubleshooting>
         <sDeadlineReason xsi:type="xsd:string">?</sDeadlineReason>
         <nRelatedTo xsi:type="xsd:double">?</nRelatedTo>
         <nPriorityLevel xsi:type="xsd:double">?</nPriorityLevel>
         <nSegmentid xsi:type="xsd:double">?</nSegmentid>
         <sSubmitterPhone xsi:type="xsd:string">?</sSubmitterPhone>
         <sCC xsi:type="xsd:string">?</sCC>
         <sCoSubmitter xsi:type="xsd:string">?</sCoSubmitter>
         <sDeadline xsi:type="xsd:string">?</sDeadline>
         <arURLReference xsi:type="int:ArrayOf_tns1_URLReference" soapenc:arrayType="dat:URLReference[]" xmlns:dat="http://dataservice"/>
      </int:submitTicketWithExtraInfo>
   </soapenv:Body>
</soapenv:Envelope>

Для остальных аргументов мне просто нужно заменить знак вопроса ? с фактическими значениями. Проблема в том, что я не знаю, как передать аргумент arURLReference в моем запросе. Как видно из WSDL, это массив структур.

1 ответ

Решение

Я использовал ColdFusion's getSOAPRequest() функция для получения запроса XML для веб-сервиса. Который выглядит так:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <ns1:submitTicketWithExtraInfo soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://some url/webService/">
         <sUserLdapAlias xsi:type="xsd:string">psingh46</sUserLdapAlias>
         <sIssueDetails xsi:type="xsd:string">test ticket submit service with extra info</sIssueDetails>
         <sIssueSummary xsi:type="xsd:string">test ticket submit service with extra info</sIssueSummary>
         <sDeadlineReason xsi:type="xsd:string"/>
         <nRelatedTo xsi:type="xsd:string">45898</nRelatedTo>
         <nPriorityLevel xsi:type="xsd:string">71</nPriorityLevel>
         <nSegmentid xsi:type="xsd:string">18244</nSegmentid>
         <sSubmitterPhone xsi:type="xsd:string"/>
         <sCC xsi:type="xsd:string"/>
         <sCoSubmitter xsi:type="xsd:string"/>
         <sDeadline xsi:type="xsd:string"/>
         <arURLReference soapenc:arrayType="ns2:URLReference[2]" xsi:type="soapenc:Array" xmlns:ns2="http://dataservice" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
            <arURLReference xsi:type="ns2:URLReference">
               <sURLReferenceComment xsi:type="xsd:string">google link</sURLReferenceComment>
               <sURLReferenceURL xsi:type="xsd:string">http://google.com</sURLReferenceURL>
            </arURLReference>
            <arURLReference xsi:type="ns2:URLReference">
               <sURLReferenceComment xsi:type="xsd:string">so link</sURLReferenceComment>
               <sURLReferenceURL xsi:type="xsd:string">http://so.com</sURLReferenceURL>
            </arURLReference>
         </arURLReference>
      </ns1:submitTicketWithExtraInfo>
   </soapenv:Body>
</soapenv:Envelope>

Используя приведенный выше запрос XML, сервис успешно вызывается с помощью SoapUI. Для получения дополнительной информации о getSOAPRequest() функция отослать это. http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-6ca2.html

Другие вопросы по тегам