Комплексный массив в запросе SOAP - PullRequest
1 голос
/ 28 ноября 2011

Я пытаюсь выяснить, как записать часть массива запроса SOAP, релевантная часть его WSDL:

<xsd:complexType name="ArrayOfProductInfo">
    <xsd:complexContent>
        <xsd:restriction base="soap-enc:Array">
            <xsd:attribute ref="soap-enc:arrayType" wsdl:arrayType="tns:ProductInfo[]"/>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="ProductInfo">
    <xsd:all>
        <xsd:element name="productID" type="xsd:string"/>
        <xsd:element name="quantity" type="xsd:int"/>
        <xsd:element name="price" type="xsd:float"/>
    </xsd:all>
</xsd:complexType>
<xsd:complexType name="clCostRequest">
    <xsd:all>
        <xsd:element name="language" type="xsd:string"/>
        <xsd:element name="items" type="tns:ArrayOfProductInfo"/>
        <xsd:element name="shipmentOriginCountry" type="xsd:string"/>
        <xsd:element name="shipmentDestinationCountry" type="xsd:string"/>
    </xsd:all>
</xsd:complexType>

С soapUI я могу видеть, что SOAPЗапрос должен выглядеть следующим образом, за исключением того, что я завернул в "????"теги, которые мыло не отображает.(Обратите также внимание, что этот узел отображается как самозакрывающийся тег.)

<soapenv:Envelope mlns:xsi="http:...">
   <soapenv:Header/>
   <soapenv:Body>
      <clCost soapenv:encodingStyle="http://schemas.xmlsoap.org/...">
         <request xsi:type="clCostRequest">
            <language xsi:type="xsd:string">en</language>
            <items xsi:type="ArrayOfProductInfo" soapenc:arrayType="ProductInfo[]"/>

                <????>productID</????>
                <????>quantity</????>
                <????>price</????>

                <????>productID</????>
                <????>quantity</????>
                <????>price</????>

            <shipmentOriginCountry xsi:type="xsd:string">US</shipmentOriginCountry>
            <shipmentDestinationCountry xsi:type="xsd:string">DE</shipmentDestinationCountry>
         </request>
      </clCost>
   </soapenv:Body>
</soapenv:Envelope>

Мне нужно передать этот массив «ProductInfo», но я не знаю, как должны выглядеть его теги.Я пробовал это безрезультатно:

<items xsi:type="ArrayOfProductInfo" soapenc:arrayType="ProductInfo[]">
    <ProductInfo xsi:type="tns:ProductInfo">
        <productID xsi:type="xsd:string">86595</productID>
        <quantity xsi:type="xsd:int">50</quantity>
        <price xsi:type="xsd:float">1.99</price>
     </ProductInfo>
    <ProductInfo xsi:type="tns:ProductInfo">
        <productID xsi:type="xsd:string">12215</productID>
        <quantity xsi:type="xsd:int">60</quantity>
        <price xsi:type="xsd:float">5.99</price>
     </ProductInfo>
</items>

Будем весьма благодарны за любые подсказки или ссылки на подобные примеры!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2018

Это должно работать

    <soapenv:Envelope mlns:xsi="http:...">
   <soapenv:Header/>
   <soapenv:Body>
      <clCost soapenv:encodingStyle="http://schemas.xmlsoap.org/...">
         <request xsi:type="clCostRequest">
            <language xsi:type="xsd:string">en</language>
            <items xsi:type="ArrayOfProductInfo" soapenc:arrayType="ProductInfo[]">
                <item xsi:type="xsd:ProductInfo">
                        <productID xsi:type="xsd:string">86595</productID>
                        <quantity xsi:type="xsd:int">50</quantity>
                        <price xsi:type="xsd:float">1.99</price>
                </item>
                <item xsi:type="xsd:ProductInfo">
                        <productID xsi:type="xsd:string">12215</productID>
                        <quantity xsi:type="xsd:int">60</quantity>
                        <price xsi:type="xsd:float">5.99</price>
                </item>
            </items>

            <shipmentOriginCountry xsi:type="xsd:string">US</shipmentOriginCountry>
            <shipmentDestinationCountry xsi:type="xsd:string">DE</shipmentDestinationCountry>
         </request>
      </clCost>
   </soapenv:Body>
</soapenv:Envelope>
0 голосов
/ 29 февраля 2012

SoapUI переведет WSDL, который вы ему дадите, и отобразит вам запросы и их параметры. Какой бы SOAPUI не создавался из WSDL, он должен быть правильным. Поэтому я советую вам проверить свой WSDL, потому что неисправность есть.

...