SOAP: целое число передается как NULL

#php #soap #null #wsdl

#php #soap #ноль #wsdl #null

Вопрос:

Из файла PHP я использую WSDL для вызова моей функции getCustomerByID (которая ожидает целое число) и передачи соответствующего идентификатора. Проблема в том, что даже при жестком кодировании идентификатора в функцию он все равно передается на сервер как NULL.

 <?php
require_once("./include/nusoap/nusoap.php");
            $client = new SoapClient('D:wsdlCustomerService_CustomerServiceSOAPhttpWithIPAddress.wsdl', array('trace' => 1));
            $cId = 100777;
            echo " CID:".$cId;
            echo "<br>";
            try{
                $customerID = $client->getCustomerById(100777);  //Error is here.
                throw new SoapFault('code', 'string', 'actor', 'detail', 'name', 'header');
            }
            catch (Exception $ex) {
            var_dump($ex->faultcode, $ex->faultstring, $ex->faultactor, $ex->detail, $ex->_name, $ex->headerfault);
            }
?>
  

Вот что вытекает из приведенного выше try / catch:

 string 'm:Server' (length=8)
string 'null' (length=4)
null
object(stdClass)[83]
  public 'getCustomerByIdFault1_getCustomerByIdFault' => string 'null' (length=4)
null
null
  

Вот элемент WSDL:

 <xsd:element name="getCustomerById">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="customerId" nillable="true" type="xsd:int"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
  

Any здесь — это то, что перехватывается сервером, и последующий ответ от сервера:

ОТПРАВЛЕНО

 <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://CustomerServices/customerService"><SOAP-ENV:Body><ns1:getCustomerById/></SOAP-ENV:Body></SOAP-ENV:Envelope>
  

Вы заметите, что <ns1:getCustomerById/> не содержит никаких значений.

Ответить

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault xmlns:m="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>m:Server</faultcode><detail><service:getCustomerByIdFault1_getCustomerByIdFault xmlns:service="http://CustomerServices/customerService" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"></service:getCustomerByIdFault1_getCustomerByIdFault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope >

Любые мысли / советы очень ценятся!

Ответ №1:

Разве вы не должны называть это как:

 $client->call('getCustomerById', array('customerId' => 100777))