SOAP WSDL Asosiyatif Diziler

3 Cevap php

Nasıl bir soap wsdl dosyası bir ilişkisel dizi tanımlayabilirsiniz? Bu şimdiye kadar bir dizi unsur türünü tanımlamak nasıl:

<wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="webservice.wsdl" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
        <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
        <xsd:complexType name="ArrayOfString">
            <xsd:complexContent>
                <xsd:restriction base="soapenc:Array">
                    <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:arrayElement"/>
                </xsd:restriction>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:schema>
</wsdl:types>

Teşekkürler!


I PHP associative arrays bahsediyorum, ve ben iletişim partinin diğer tarafta geri ilişkilendirilebilir diziler dönüştürülmüş olacak herhangi bir anahtar => değer dize çiftleri herhangi bir sayı, kullanmak istiyorum. Bir alternatif olarak, ben dize olarak serileştirilmiş dizi veya json temsil gönderebilir, ama ben de wsdl bunu nasıl bilmek istiyorum.

Teşekkürler!

3 Cevap

sabun üzerinde bir php ilişkisel dizi aktarmak için sizin wsdl aşağıdaki tanımlamak gerekir:

<xsd:complexType name="KeyValueData">
      <xsd:sequence>
        <xsd:element minOccurs="1" maxOccurs="1" name="id" type="string"/>
        <xsd:element minOccurs="1" maxOccurs="1" name="name" type="string"/>
        <xsd:element minOccurs="1" maxOccurs="1" name="data" type="string"/>
      </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ArrayOfKeyValueData">
    <xsd:sequence>
      <xsd:element minOccurs="0" maxOccurs="unbounded"
               name="keyval" type="tns:KeyValueData"/>
    </xsd:sequence>
</xsd:complexType> 

şimdi sonucu türü olarak veya parametre olarak yeni tanımlanan ArrayOfKeyValueData türünü belirtin

<message name='getPostStatsResponse'>
  <part name='Result' type='ArrayOfKeyValueData'/>
</message>

ve benzeri Someting ile işlemi belirtmek

<operation name='getPostStats'>
    <input message='tns:getPostStatsRequest'/>
    <output message='tns:getPostStatsResponse'/>
</operation>

Böyle bir şey döner php yazılı web hizmeti çeşit cezası çalışacak

return array("k1" => "v1", "k2" => "v2");

Eğer istemci olarak php kullanıyorsanız, istemci tarafında tamamen aynı dizi alacak. Diğer dillerin veya sabun kütüphaneler her dil "ilişkisel dizi" kavramının bu tür olduğu gibi, başka bir yapı oluşturabilir.

WSDL ilişkilendirilebilir dizinin ilişkisel doğasını tarif edemez. Yapabileceğin en iyi isim / değer bir dizi tanımlamak olacaktır.

Eğer bir ilişkisel dizi döndürür bir operasyon ile bir PHP hizmet tanımlayabilirsiniz, daha sonra üretir ne WSDL görmek? Daha sonra kendi, elle yazılmış WSDLs de aynı modeli takip olabilir.

Dizeleri bir dizi kullanmak istiyorsanız sadece dizi ihtiyacı türü beyan edebilir:

<xs:complexType name="SomeTypeThatUsesAnArrayOfStrings">
    <xs:sequence>
        <xs:element name="TheStringValue" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>

Ve arada, "ilişkisel dizi" ile ne demek istiyorsun? Bir c + + harita ya da Python sözlüğü gibi bir şey?