xref: /PHP-7.1/ext/soap/tests/bugs/bug36226-2.phpt (revision 610c7fbe)
1--TEST--
2Bug #36226 (Inconsistent handling when passing nillable arrays)
3--SKIPIF--
4<?php require_once('skipif.inc'); ?>
5--INI--
6soap.wsdl_cache_enabled=0
7--FILE--
8<?php
9$timestamp = "2005-11-08T11:22:07+03:00";
10$wsdl = dirname(__FILE__)."/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) {
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