Nasıl bir PHP SoapClient istek içine bir değer olarak bir dizi geçebilir?

2 Cevap php

Nasıl bir PHP SoapClient istek içine bir değer olarak bir dizi geçebilir?

Ben bir SoapClient örneği ve zaten bağlı bulunmaktadır. Daha sonra 3 parametreleri (dize, dize, hashmap) beklediği bir Webcoder yöntemine bir çağrı yapmayı deneyin.

İşte aşağıda çalışmak için beklenen budur. Xml çıktısını görüntüleme Ama, params düğüm boştur.

soapclient->doSomething(array('id' => 'blah', 'page' => 'blah', 'params' => array('email' => 'test@test.com', 'password' => 'password', 'blah' => 'blah')));

Sabun vücut xml (boş params elemanı unutmayın) bu gibi biter:

<SOAP-ENV:Body><ns1:doSomething>
<id>blah</id>
<page>blah</page>
<params/>
</ns1:register></SOAP-ENV:Body>

2 Cevap

JAX-WS webservices için hashmap giriş parametresi ile ilgili bir sorun olabilir. Oluşturulan xsd şema hashmaps için yanlış gibi görünüyor. Sarıcı nesne haritayı yerleştirme çıkışı doğru Xsd için JAX-WS neden olur.

public class MapWrapper {
    public HashMap<String, String> map;
}


// in your web service class
@WebMethod(operationName = "doSomething")
public SomeResponseObject doSomething(
        @WebParam(name = "id") String id,
        @WebParam(name = "page") String page,
        @WebParam(name = "params") MapWrapper params {
    // body of method
}

Sonra php kodu başarılı olur. Ben SoapVar ya SoapParam gerek yoktu ve MapWrapper olmadan çalışmak için bu yöntemlerden birini alamadım bulundu.

$entry1['key'] = 'somekey';
$entry1['value'] = 1;
$params['map'] = array($entry1);
soapclient->doSomething(array('id' => 'blah', 'page' => 'blah', 
    'params' => $params));

Burada sargı ile üretilen doğru xsd olduğunu

<xs:complexType name="mapWrapper">
  <xs:sequence>
    <xs:element name="map">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="entry" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="key" minOccurs="0" type="xs:string"/>
                <xs:element name="value" minOccurs="0" type="xs:string"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

Burada sadece HashMap ile JAX-WS tarafından oluşturulan yanlış şema

<xs:complexType name="hashMap">
  <xs:complexContent>
    <xs:extension base="tns:abstractMap">
      <xs:sequence/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>
<xs:complexType name="abstractMap" abstract="true">
  <xs:sequence/>
</xs:complexType>

Bir son not. HashMap Sarma Bu çözüm ile çalıştı, ancak HashMap vermedi. Nesne xsd eşleştirilmiş alır: Bir xsd şema nesnesi ziyade java webservice girer anyType sadece nesne.

Webservice tanımına bağlı olarak, hashmap parametreyi doğrudan diziden oluşturuldu edilemez, belirli bir yapı / kodlama olması gerekebilir. Bu konuda WSDL kontrol etmek istiyorum, ve SoapVar içine bir göz ve Sabun parametre inşaat fazla seçenek için SoapParam dersleri alabilir.