PHP SOAP kullanıcı tanımlı türleri Passing

1 Cevap php

Ben sorun PHP SOAP aramaları kullanıcı tanımlı türleri geçmek için nasıl bir anlayış yaşıyorum. Birisi bana bir ipucu (veya elle bağlantı) verebilir misiniz, lütfen?

Example: In my WSDL file, I define the type:

<types>
<schema targetNamespace="http://example.com/CustData"
        xmlns="http://www.w3.org/2000/10/XMLSchema">
  <element name="personalInformation">
    <complexType>
      <all>
        <element name="name" type="xsd:string"/>
        <element name="title" type="xsd:string"/>
        <element name="lang" type="xsd:string"/>
      </all>
    </complexType>
  </element>
</schema>

Bu gibi hizmet tepki mesajı tanımlar:

<message name='getCustDataResponse'>
<part name='Result' type='xsd:personalInformation'/>
<part name='Result1' type='xsd:string'/>
</message>

Eksik parçası - nasıl SOAP sunucu tarafında cevabı başlatmak mı?

Ben yazmaya çalıştım:

$arrRes['Result']['name'] = 'xxx';
$arrRes['Result']['title'] = 'yyy';
$arrRes['Result']['lang'] = 'zzz';
$arrRes['Result']['hehehehe1'] = 'test1';
$arrRes['Result']['hehehehe2'] = 'test2';
$arrRes['Result']['hehehehe3'] = 'test3';
$arrRes['Result']['hehehehe4'] = 'test4';
$arrRes['Result1'] = 'result1';
$arrRes['blablabla'] = 'hahaha';
return $arrRes;

İstemci geri yanıtı alır ve bunu var_dump zaman, arrRes gösterir:

array(2) { ["Result"]=>  array(7) { ["name"]=>  string(3) "xxx" ["title"]=>  string(3) "yyy" ["lang"]=>  string(3) "zzz" ["hehehehe1"]=>  string(5) "test1" ["hehehehe2"]=>  string(5) "test2" ["hehehehe3"]=>  string(5) "test3" ["hehehehe4"]=>  string(5) "test4" } ["Result1"]=>  string(7) "result1" } 

Ben başlatıldı dizi ben tanımladığınız yanıt mesajı uymuyor çünkü bir hata almak bekleniyor.

Bu yüzden ben wsdl tanımladığınız türü hiç kullanılmaz sanırım - bu yüzden wsdl veya istemci veya sunucu kodu ya bir hata olmalı.

Tavsiye için şimdiden teşekkür ederiz!

Nikola

1 Cevap

Ben php üzerinde SOAP sunucu tarafında çok yapılır, ama here is an example of how to use class mapping php SoapClient ile değil. Ben SoapServer aynı şekilde çalışır oldukça eminim. (Muhtemelen bile sunucu / istemci arasındaki aynı sınıf haritayı paylaşmak olabilir).

Yani böyle bir sınıfı vardır:

class PersonalInformation
{
public $name;
public $title:
public $lang;
}

Sonra yanıt:

function getCustData()
{
    $response = new PersonalInformation;
    $response->name = "Me";
    $response->title = "Hi World";
    $response->lang = "En-US";

    $arrResult = array();
    $arrResult['Result'] = $response;
    $arrResult['Result1'] = 'lol';
    return $arrResult
}

Sonra tıpkı bir sınıf haritayı kullanabilirsiniz:

$server = new SoapServer('foo?wsdl', classmap=array('personalInformation' => 'PersonalInformation'));
//I'm not sure whether you have to use the classmap on BOTH server/client
$client = new SoapClient('foo?wsdl', classmap=array('personalInformation' => 'PersonalInformation'));

Sadece istek - Bildiğim kadarıyla uygun olmayan response veri hataları gibi, ben php gerçekten Yanıtı herhangi bir doğrulama yok sanmıyorum.