1--TEST-- 2Bug #36226 (Inconsistent handling when passing nillable arrays) 3--EXTENSIONS-- 4soap 5--INI-- 6soap.wsdl_cache_enabled=0 7--FILE-- 8<?php 9$timestamp = "2005-11-08T11:22:07+03:00"; 10$wsdl = __DIR__."/bug36226-2.wsdl"; 11 12function PostEvents($x) { 13 var_dump($x); 14 exit(); 15 return $x; 16} 17 18class TestSoapClient extends SoapClient { 19 function __construct($wsdl, $options) { 20 parent::__construct($wsdl, $options); 21 $this->server = new SoapServer($wsdl, $options); 22 $this->server->addFunction('PostEvents'); 23 } 24 25 function __doRequest($request, $location, $action, $version, $one_way = 0): ?string { 26 echo "$request\n"; 27 $this->server->handle($request); 28 return $response; 29 } 30} 31 32$soapClient = new TestSoapClient($wsdl, 33 array( 34 'trace' => 1, 35 'exceptions' => 0, 36 'classmap' => array( 37 'logOnEvent' => 'LogOnEvent', 38 'logOffEvent' => 'LogOffEvent', 39 'events' => 'IVREvents' 40 ), 41 'features' => SOAP_SINGLE_ELEMENT_ARRAYS 42 )); 43 44$logOnEvent = null; 45//$logOnEvent = array(); 46$logOffEvents[] = new LogOffEvent(34567, $timestamp, "Smoked"); 47//$logOffEvents[] = new LogOffEvent(34568, $timestamp, "SmokeFree"); 48$ivrEvents = new IVREvents("1.0", 101, 12345, 'IVR', $logOnEvent, $logOffEvents); 49$result = $soapClient->PostEvents($ivrEvents); 50 51class LogOffEvent { 52 public $audienceMemberId; 53 public $timestamp; 54 public $smokeStatus; 55 public $callInitiator; 56 57 function __construct($audienceMemberId, $timestamp, $smokeStatus) { 58 $this->audienceMemberId = $audienceMemberId; 59 $this->timestamp = $timestamp; 60 $this->smokeStatus = $smokeStatus; 61 $this->callInitiator = "IVR"; 62 } 63} 64 65class LogOnEvent { 66 public $audienceMemberId; 67 public $timestamp; 68 69 function __construct($audienceMemberId, $timestamp) { 70 $this->audienceMemberId = $audienceMemberId; 71 $this->timestamp = $timestamp; 72 } 73} 74 75class IVREvents { 76 public $version; 77 public $activityId; 78 public $messageId; 79 public $source; 80 public $logOnEvent; 81 public $logOffEvent; 82 83 function __construct($version, $activityId, $messageId, $source, $logOnEvent=NULL, $logOffEvent=NULL) { 84 $this->version = $version; 85 $this->activityId = $activityId; 86 $this->messageId = $messageId; 87 $this->source = $source; 88 $this->logOnEvent = $logOnEvent; 89 $this->logOffEvent = $logOffEvent; 90 } 91 92} 93?> 94--EXPECT-- 95<?xml version="1.0" encoding="UTF-8"?> 96<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testurl/Message" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Body><ns1:ivrEvents version="1.0" activityId="101" messageId="12345" source="IVR"><ns1:logOffEvent audienceMemberId="34567" timestamp="2005-11-08T11:22:07+03:00" smokeStatus="Smoked" callInitiator="IVR"/><ns1:logOnEvent xsi:nil="true"/></ns1:ivrEvents></SOAP-ENV:Body></SOAP-ENV:Envelope> 97 98object(IVREvents)#5 (6) { 99 ["version"]=> 100 string(3) "1.0" 101 ["activityId"]=> 102 int(101) 103 ["messageId"]=> 104 int(12345) 105 ["source"]=> 106 string(3) "IVR" 107 ["logOnEvent"]=> 108 NULL 109 ["logOffEvent"]=> 110 array(1) { 111 [0]=> 112 object(LogOffEvent)#6 (4) { 113 ["audienceMemberId"]=> 114 int(34567) 115 ["timestamp"]=> 116 string(25) "2005-11-08T11:22:07+03:00" 117 ["smokeStatus"]=> 118 string(6) "Smoked" 119 ["callInitiator"]=> 120 string(3) "IVR" 121 } 122 } 123} 124