Fixed bug #35142 (SOAP Client/Server Complex Object Support)

This commit is contained in:
Dmitry Stogov 2005-11-08 08:30:19 +00:00
parent 9c14ce94f3
commit 270640283e
5 changed files with 701 additions and 2 deletions

1
NEWS
View file

@ -2,6 +2,7 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? Nov 2005, PHP 5.1
- Fixed initializing and argument checking for posix_mknod(). (Derick)
- Fixed bug #35142 (SOAP Client/Server Complex Object Support). (Dmitry)
- Fixed bug #35135 (PDOStatment without related PDO object may crash). (Ilia)
- Fixed bug #35091 (SoapClient leaks memory). (Dmitry)
- Fixed bug #35078 (configure does not find ldap_start_tls_s). (Jani)

View file

@ -1223,6 +1223,10 @@ static zval *to_zval_object(encodeTypePtr type, xmlNodePtr data)
unset_zval_property(ret, "any" TSRMLS_CC);
redo_any = 1;
}
if (Z_TYPE_P(ret) == IS_OBJECT && ce != ZEND_STANDARD_CLASS_DEF_PTR) {
zend_object *zobj = zend_objects_get_address(ret TSRMLS_CC);
zobj->ce = ce;
}
} else {
zval *base;

View file

@ -2192,9 +2192,25 @@ static void schema_content_model_fixup(sdlCtx *ctx, sdlContentModelPtr model)
}
break;
}
case XSD_CONTENT_SEQUENCE:
case XSD_CONTENT_ALL:
case XSD_CONTENT_CHOICE: {
if (model->max_occurs != 1) {
HashPosition pos;
sdlContentModelPtr *tmp;
zend_hash_internal_pointer_reset_ex(model->u.content, &pos);
while (zend_hash_get_current_data_ex(model->u.content, (void**)&tmp, &pos) == SUCCESS) {
(*tmp)->min_occurs = 0;
(*tmp)->max_occurs = model->max_occurs;
zend_hash_move_forward_ex(model->u.content, &pos);
}
model->kind = XSD_CONTENT_ALL;
model->min_occurs = 1;
model->max_occurs = 1;
}
}
case XSD_CONTENT_SEQUENCE:
case XSD_CONTENT_ALL: {
sdlContentModelPtr *tmp;
zend_hash_internal_pointer_reset(model->u.content);

135
ext/soap/tests/bugs/bug35142.phpt Executable file
View file

@ -0,0 +1,135 @@
--TEST--
Bug #35142 SOAP Client/Server Complex Object Support
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--INI--
soap.wsdl_cache_enabled=0
--FILE--
<?php
ini_set("soap.wsdl_cache_enabled",0);
$timestamp = "2005-11-08T11:22:07+03:00";
$wsdl = dirname(__FILE__)."/bug35142.wsdl";
function PostEvents($x) {
var_dump($x);
exit();
return $x;
}
class TestSoapClient extends SoapClient {
function __construct($wsdl, $options) {
parent::__construct($wsdl, $options);
$this->server = new SoapServer($wsdl, $options);
$this->server->addFunction('PostEvents');
}
function __doRequest($request, $location, $action, $version) {
echo "$request\n";
$this->server->handle($request);
return $response;
}
}
$soapClient = new TestSoapClient($wsdl,
array('trace' => 1, 'exceptions' => 0,
'classmap' => array('logOnEvent' => 'LogOnEvent',
'logOffEvent' => 'LogOffEvent',
'events' => 'IVREvents')));
$logOnEvent = new LogOnEvent(34567, $timestamp);
$logOffEvents[] = new LogOffEvent(34567, $timestamp, "Smoked");
$logOffEvents[] = new LogOffEvent(34568, $timestamp, "SmokeFree");
$ivrEvents = new IVREvents("1.0", 101, 12345, 'IVR', $logOnEvent, $logOffEvents);
$result = $soapClient->PostEvents($ivrEvents);
class LogOffEvent {
public $audienceMemberId;
public $timestamp;
public $smokeStatus;
public $callInititator;
function __construct($audienceMemberId, $timestamp, $smokeStatus) {
$this->audienceMemberId = $audienceMemberId;
$this->timestamp = $timestamp;
$this->smokeStatus = $smokeStatus;
$this->callInitiator = "IVR";
}
}
class LogOnEvent {
public $audienceMemberId;
public $timestamp;
function __construct($audienceMemberId, $timestamp) {
$this->audienceMemberId = $audienceMemberId;
$this->timestamp = $timestamp;
}
}
class IVREvents {
public $version;
public $activityId;
public $messageId;
public $source;
public $logOnEvent;
public $logOffEvent;
function __construct($version, $activityId, $messageId, $source, $logOnEvent=NULL, $logOffEvent=NULL) {
$this->version = $version;
$this->activityId = $activityId;
$this->messageId = $messageId;
$this->source = $source;
$this->logOnEvent = $logOnEvent;
$this->logOffEvent = $logOffEvent;
}
}
?>
--EXPECTF--
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://testurl/Message"><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:logOffEvent audienceMemberId="34568" timestamp="2005-11-08T11:22:07+03:00" smokeStatus="SmokeFree" callInitiator="IVR"/><ns1:logOnEvent audienceMemberId="34567" timestamp="2005-11-08T11:22:07+03:00"/></ns1:ivrEvents></SOAP-ENV:Body></SOAP-ENV:Envelope>
object(IVREvents)#%d (6) {
["version"]=>
string(3) "1.0"
["activityId"]=>
int(101)
["messageId"]=>
int(12345)
["logOffEvent"]=>
array(2) {
[0]=>
object(LogOffEvent)#%d (4) {
["audienceMemberId"]=>
int(34567)
["timestamp"]=>
string(25) "2005-11-08T11:22:07+03:00"
["smokeStatus"]=>
string(6) "Smoked"
["callInitiator"]=>
string(3) "IVR"
}
[1]=>
object(LogOffEvent)#%d (4) {
["audienceMemberId"]=>
int(34568)
["timestamp"]=>
string(25) "2005-11-08T11:22:07+03:00"
["smokeStatus"]=>
string(9) "SmokeFree"
["callInitiator"]=>
string(3) "IVR"
}
}
["logOnEvent"]=>
object(LogOnEvent)#%d (2) {
["audienceMemberId"]=>
int(34567)
["timestamp"]=>
string(25) "2005-11-08T11:22:07+03:00"
}
["source"]=>
string(3) "IVR"
}

543
ext/soap/tests/bugs/bug35142.wsdl Executable file
View file

@ -0,0 +1,543 @@
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:s1="http://testurl/Events" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://testurl/Message" xmlns:s3="http://testurl/Smoker" xmlns:soap12enc="http://www.w3.org/2002/06/soap-envelope" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:s4="http://testurl/AudienceMember" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s2="http://testurl/Actions" xmlns:tns="http://testurl/Service" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://testurl/Service" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<s:schema elementFormDefault="qualified" targetNamespace="http://testurl/Message">
<s:import namespace="http://testurl/Events" />
<s:import namespace="http://testurl/Actions" />
<s:element name="ivrActions" type="s0:actions" />
<s:complexType name="actions">
<s:complexContent mixed="false">
<s:extension base="s0:abstractMessage">
<s:sequence>
<s:choice minOccurs="0" maxOccurs="unbounded">
<s:element minOccurs="0" maxOccurs="1" name="pauseSmokerAction" type="s2:pauseSmokerAction" />
<s:element minOccurs="0" maxOccurs="1" name="terminateSmokerAction" type="s2:terminateSmokerAction" />
<s:element minOccurs="0" maxOccurs="1" name="activateSmokerAction" type="s2:activateSmokerAction" />
<s:element minOccurs="0" maxOccurs="1" name="addSmokerAction" type="s2:addSmokerAction" />
<s:element minOccurs="0" maxOccurs="1" name="updateSmokerAction" type="s2:updateSmokerAction" />
<s:element minOccurs="0" maxOccurs="1" name="deleteSmokerAction" type="s2:deleteSmokerAction" />
</s:choice>
</s:sequence>
<s:attribute default="Client" name="source" type="s0:ivrMessageSource" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="abstractMessage" abstract="true">
<s:attribute default="1.0" name="version" type="s:string" />
<s:attribute name="activityId" type="s:unsignedLong" use="required" />
<s:attribute name="messageId" type="s:unsignedLong" use="required" />
</s:complexType>
<s:complexType name="events">
<s:complexContent mixed="false">
<s:extension base="s0:abstractMessage">
<s:sequence>
<s:choice minOccurs="0" maxOccurs="unbounded">
<s:element minOccurs="0" maxOccurs="1" name="authFailureEvent" type="s1:authFailureEvent" />
<s:element minOccurs="0" maxOccurs="1" name="logOffEvent" type="s1:logOffEvent" />
<s:element minOccurs="0" maxOccurs="1" name="cravingLineEvent" type="s1:cravingLineEvent" />
<s:element minOccurs="0" maxOccurs="1" name="terminateEvent" type="s1:terminateEvent" />
<s:element minOccurs="0" maxOccurs="1" name="relapseWakeSmsReplaceEvent" type="s1:relapseWakeSmsReplaceEvent" />
<s:element minOccurs="0" maxOccurs="1" name="confessionLineEvent" type="s1:confessionLineEvent" />
<s:element minOccurs="0" maxOccurs="1" name="rfqRecordedEvent" type="s1:rfqRecordedEvent" />
<s:element minOccurs="0" maxOccurs="1" name="logOnEvent" type="s1:logOnEvent" />
</s:choice>
</s:sequence>
<s:attribute default="IVR" name="source" type="s0:ivrMessageSource" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:simpleType name="ivrMessageSource">
<s:restriction base="s:string">
<s:enumeration value="IVR" />
<s:enumeration value="Client" />
</s:restriction>
</s:simpleType>
<s:complexType name="actionResults">
<s:complexContent mixed="false">
<s:extension base="s0:abstractMessage">
<s:sequence>
<s:choice minOccurs="0" maxOccurs="unbounded">
<s:element minOccurs="0" maxOccurs="1" name="updateSmokerActionResult" type="s2:updateSmokerActionResult" />
<s:element minOccurs="0" maxOccurs="1" name="activateSmokerActionResult" type="s2:activateSmokerActionResult" />
<s:element minOccurs="0" maxOccurs="1" name="deleteSmokerActionResult" type="s2:deleteSmokerActionResult" />
<s:element minOccurs="0" maxOccurs="1" name="addSmokerActionResult" type="s2:addSmokerActionResult" />
<s:element minOccurs="0" maxOccurs="1" name="pauseSmokerActionResult" type="s2:pauseSmokerActionResult" />
<s:element minOccurs="0" maxOccurs="1" name="terminateSmokerActionResult" type="s2:terminateSmokerActionResult" />
</s:choice>
</s:sequence>
<s:attribute default="IVR" name="source" type="s0:ivrMessageSource" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="eventResults">
<s:complexContent mixed="false">
<s:extension base="s0:abstractMessage">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="eventResult" type="s1:eventResult" />
</s:sequence>
<s:attribute default="IVR" name="source" type="s0:ivrMessageSource" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:element name="ivrActionResults" type="s0:actionResults" />
<s:element name="ivrEvents" type="s0:events" />
<s:element name="ivrEventResults" type="s0:eventResults" />
</s:schema>
<s:schema elementFormDefault="qualified" targetNamespace="http://testurl/Events">
<s:complexType name="authFailureEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent">
<s:attribute name="mobileNumber" type="s:string" />
<s:attribute name="line" type="s1:line" use="required" />
<s:attribute name="reason" type="s:string" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="abstractEvent" abstract="true">
<s:attribute name="audienceMemberId" type="s:unsignedLong" />
<s:attribute name="timestamp" type="s:dateTime" use="required" />
</s:complexType>
<s:complexType name="logOnEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent" />
</s:complexContent>
</s:complexType>
<s:complexType name="cravingLineEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="selection" type="s1:cravingLineEventSelection" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="cravingLineEventSelection">
<s:attribute name="type" type="s1:cravingLineMessageType" use="required" />
<s:attribute name="msgNumber" type="s:positiveInteger" />
</s:complexType>
<s:simpleType name="cravingLineMessageType">
<s:restriction base="s:string">
<s:enumeration value="Motivational" />
<s:enumeration value="StressReval" />
<s:enumeration value="EffectReg" />
</s:restriction>
</s:simpleType>
<s:complexType name="confessionLineEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent">
<s:attribute name="smokeStatus" type="s1:smokeStatus" use="required" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:simpleType name="smokeStatus">
<s:restriction base="s:string">
<s:enumeration value="Smoked" />
<s:enumeration value="SmokeFree" />
</s:restriction>
</s:simpleType>
<s:complexType name="rfqRecordedEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent" />
</s:complexContent>
</s:complexType>
<s:complexType name="terminateEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent" />
</s:complexContent>
</s:complexType>
<s:complexType name="logOffEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent">
<s:attribute name="smokeStatus" type="s1:smokeStatus" use="required" />
<s:attribute name="callInitiator" type="s1:callInitiator" use="required" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:simpleType name="callInitiator">
<s:restriction base="s:string">
<s:enumeration value="AudienceMember" />
<s:enumeration value="IVR" />
</s:restriction>
</s:simpleType>
<s:complexType name="relapseWakeSmsReplaceEvent">
<s:complexContent mixed="false">
<s:extension base="s1:abstractEvent">
<s:attribute name="relapseCount" type="s:positiveInteger" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:simpleType name="line">
<s:restriction base="s:string">
<s:enumeration value="LogOnOffLine" />
<s:enumeration value="CravingLine" />
<s:enumeration value="ConfessionLine" />
<s:enumeration value="ReasonsForQuittingLine" />
</s:restriction>
</s:simpleType>
<s:complexType name="eventResult">
<s:attribute name="success" type="s:boolean" use="required" />
</s:complexType>
</s:schema>
<s:schema elementFormDefault="qualified" targetNamespace="http://testurl/Actions">
<s:import namespace="http://testurl/Smoker" />
<s:complexType name="updateSmokerActionResult">
<s:complexContent mixed="false">
<s:extension base="s2:abstractActionResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s2:updateSmokerActionResultSmoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="abstractActionResult">
<s:attribute name="resultId" type="s:unsignedLong" use="required" />
</s:complexType>
<s:complexType name="pauseSmokerActionResult">
<s:complexContent mixed="false">
<s:extension base="s2:abstractActionResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s2:pauseSmokerActionResultSmoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="pauseSmokerActionResultSmoker">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
<s:attribute name="status" type="s2:pauseSmokerActionResultSmokerStatus" use="required" />
<s:attribute name="exception" type="s2:pauseSmokerActionResultSmokerException" />
</s:complexType>
<s:simpleType name="pauseSmokerActionResultSmokerStatus">
<s:restriction base="s:string">
<s:enumeration value="Paused" />
<s:enumeration value="NotPaused" />
</s:restriction>
</s:simpleType>
<s:simpleType name="pauseSmokerActionResultSmokerException">
<s:restriction base="s:string">
<s:enumeration value="UnspecifiedError" />
<s:enumeration value="IDNotFound" />
</s:restriction>
</s:simpleType>
<s:complexType name="addSmokerActionResult">
<s:complexContent mixed="false">
<s:extension base="s2:abstractActionResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s2:addSmokerActionResultSmoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="addSmokerActionResultSmoker">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
<s:attribute name="status" type="s2:addSmokerActionResultSmokerStatus" use="required" />
<s:attribute name="exception" type="s2:addSmokerActionResultSmokerException" />
</s:complexType>
<s:simpleType name="addSmokerActionResultSmokerStatus">
<s:restriction base="s:string">
<s:enumeration value="Added" />
<s:enumeration value="NotAdded" />
</s:restriction>
</s:simpleType>
<s:simpleType name="addSmokerActionResultSmokerException">
<s:restriction base="s:string">
<s:enumeration value="UnspecifiedError" />
<s:enumeration value="DuplicateID" />
</s:restriction>
</s:simpleType>
<s:complexType name="deleteSmokerActionResult">
<s:complexContent mixed="false">
<s:extension base="s2:abstractActionResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s2:deleteSmokerActionResultSmoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="deleteSmokerActionResultSmoker">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
<s:attribute name="status" type="s2:deleteSmokerActionResultSmokerStatus" use="required" />
<s:attribute name="exception" type="s2:deleteSmokerActionResultSmokerException" />
</s:complexType>
<s:simpleType name="deleteSmokerActionResultSmokerStatus">
<s:restriction base="s:string">
<s:enumeration value="Deleted" />
<s:enumeration value="NotDeleted" />
</s:restriction>
</s:simpleType>
<s:simpleType name="deleteSmokerActionResultSmokerException">
<s:restriction base="s:string">
<s:enumeration value="UnspecifiedError" />
<s:enumeration value="IDNotFound" />
</s:restriction>
</s:simpleType>
<s:complexType name="activateSmokerActionResult">
<s:complexContent mixed="false">
<s:extension base="s2:abstractActionResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s2:activateSmokerActionResultSmoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="activateSmokerActionResultSmoker">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
<s:attribute name="status" type="s2:activateSmokerActionResultSmokerStatus" use="required" />
<s:attribute name="exception" type="s2:activateSmokerActionResultSmokerException" />
</s:complexType>
<s:simpleType name="activateSmokerActionResultSmokerStatus">
<s:restriction base="s:string">
<s:enumeration value="Activated" />
<s:enumeration value="NotActivated" />
</s:restriction>
</s:simpleType>
<s:simpleType name="activateSmokerActionResultSmokerException">
<s:restriction base="s:string">
<s:enumeration value="UnspecifiedError" />
<s:enumeration value="IDNotFound" />
</s:restriction>
</s:simpleType>
<s:complexType name="terminateSmokerActionResult">
<s:complexContent mixed="false">
<s:extension base="s2:abstractActionResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s2:terminateSmokerActionResultSmoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="terminateSmokerActionResultSmoker">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
<s:attribute name="status" type="s2:terminateSmokerActionResultSmokerStatus" use="required" />
<s:attribute name="exception" type="s2:terminateSmokerActionResultSmokerException" />
</s:complexType>
<s:simpleType name="terminateSmokerActionResultSmokerStatus">
<s:restriction base="s:string">
<s:enumeration value="Terminated" />
<s:enumeration value="NotTerminated" />
</s:restriction>
</s:simpleType>
<s:simpleType name="terminateSmokerActionResultSmokerException">
<s:restriction base="s:string">
<s:enumeration value="UnspecifiedError" />
<s:enumeration value="IDNotFound" />
</s:restriction>
</s:simpleType>
<s:complexType name="updateSmokerActionResultSmoker">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
<s:attribute name="status" type="s2:updateSmokerActionResultSmokerStatus" use="required" />
<s:attribute name="exception" type="s2:updateSmokerActionResultSmokerException" />
</s:complexType>
<s:simpleType name="updateSmokerActionResultSmokerStatus">
<s:restriction base="s:string">
<s:enumeration value="Updated" />
<s:enumeration value="NotUpdated" />
</s:restriction>
</s:simpleType>
<s:simpleType name="updateSmokerActionResultSmokerException">
<s:restriction base="s:string">
<s:enumeration value="UnspecifiedError" />
<s:enumeration value="IDNotFound" />
</s:restriction>
</s:simpleType>
<s:complexType name="pauseSmokerAction">
<s:complexContent mixed="false">
<s:extension base="s2:abstractAction">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="audienceMemberID" type="s:unsignedLong" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="abstractAction" abstract="true">
<s:attribute name="requestId" type="s:unsignedLong" use="required" />
</s:complexType>
<s:complexType name="addSmokerAction">
<s:complexContent mixed="false">
<s:extension base="s2:abstractAction">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s3:smoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="updateSmokerAction">
<s:complexContent mixed="false">
<s:extension base="s2:abstractAction">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="smoker" type="s3:smoker" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="terminateSmokerAction">
<s:complexContent mixed="false">
<s:extension base="s2:abstractAction">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="deleteSmokerAction">
<s:complexContent mixed="false">
<s:extension base="s2:abstractAction">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="audienceMemberID" type="s:unsignedLong" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="activateSmokerAction">
<s:complexContent mixed="false">
<s:extension base="s2:abstractAction">
<s:attribute name="audienceMemberId" type="s:unsignedLong" use="required" />
</s:extension>
</s:complexContent>
</s:complexType>
</s:schema>
<s:schema elementFormDefault="qualified" targetNamespace="http://testurl/Smoker">
<s:import namespace="http://testurl/AudienceMember" />
<s:complexType name="smoker">
<s:complexContent mixed="false">
<s:extension base="s4:ivrAudienceMember">
<s:attribute name="startDate" type="s:date" use="required" />
<s:attribute name="phase" type="s3:phase" use="required" />
<s:attribute name="day" type="s:positiveInteger" />
<s:attribute name="track" type="s3:track" use="required" />
<s:attribute name="status" type="s3:status" use="required" />
<s:attribute name="baseTime" type="s:string" />
<s:attribute name="sunWakeOffset" type="s:string" />
<s:attribute name="monWakeOffset" type="s:string" />
<s:attribute name="tueWakeOffset" type="s:string" />
<s:attribute name="wedWakeOffset" type="s:string" />
<s:attribute name="thuWakeOffset" type="s:string" />
<s:attribute name="friWakeOffset" type="s:string" />
<s:attribute name="satWakeOffset" type="s:string" />
<s:attribute name="sunSleepOffset" type="s:string" />
<s:attribute name="monSleepOffset" type="s:string" />
<s:attribute name="tueSleepOffset" type="s:string" />
<s:attribute name="wedSleepOffset" type="s:string" />
<s:attribute name="thuSleepOffset" type="s:string" />
<s:attribute name="friSleepOffset" type="s:string" />
<s:attribute name="satSleepOffset" type="s:string" />
<s:attribute name="sunLogOnWindowOffset" type="s:string" />
<s:attribute name="monLogOnWindowOffset" type="s:string" />
<s:attribute name="tueLogOnWindowOffset" type="s:string" />
<s:attribute name="wedLogOnWindowOffset" type="s:string" />
<s:attribute name="thuLogOnWindowOffset" type="s:string" />
<s:attribute name="friLogOnWindowOffset" type="s:string" />
<s:attribute name="satLogOnWindowOffset" type="s:string" />
<s:attribute name="sunLogOffWindowOffset" type="s:string" />
<s:attribute name="monLogOffWindowOffset" type="s:string" />
<s:attribute name="tueLogOffWindowOffset" type="s:string" />
<s:attribute name="wedLogOffWindowOffset" type="s:string" />
<s:attribute name="thuLogOffWindowOffset" type="s:string" />
<s:attribute name="friLogOffWindowOffset" type="s:string" />
<s:attribute name="satLogOffWindowOffset" type="s:string" />
</s:extension>
</s:complexContent>
</s:complexType>
<s:simpleType name="phase">
<s:restriction base="s:string">
<s:enumeration value="Prep" />
<s:enumeration value="Quit" />
<s:enumeration value="Followup" />
</s:restriction>
</s:simpleType>
<s:simpleType name="track">
<s:restriction base="s:string">
<s:enumeration value="NRT" />
<s:enumeration value="NonNRT" />
</s:restriction>
</s:simpleType>
<s:simpleType name="status">
<s:restriction base="s:string">
<s:enumeration value="Pre-Start" />
<s:enumeration value="Completed" />
<s:enumeration value="Terminated" />
<s:enumeration value="Paused" />
<s:enumeration value="Active" />
</s:restriction>
</s:simpleType>
</s:schema>
<s:schema elementFormDefault="qualified" targetNamespace="http://testurl/AudienceMember">
<s:import namespace="http://testurl/Smoker" />
<s:complexType name="ivrAudienceMember">
<s:attribute name="id" type="s:unsignedLong" use="required" />
<s:attribute name="mobileNumber" type="s:string" />
<s:attribute name="firstName" type="s:string" />
<s:attribute name="lastName" type="s:string" />
</s:complexType>
</s:schema>
</types>
<message name="PostActionsSoapIn">
<part name="ivrActions" element="s0:ivrActions" />
</message>
<message name="PostActionsSoapOut">
<part name="PostActionsResult" element="s0:ivrActionResults" />
</message>
<message name="PostEventsSoapIn">
<part name="ivrEvents" element="s0:ivrEvents" />
</message>
<message name="PostEventsSoapOut">
<part name="PostEventsResult" element="s0:ivrEventResults" />
</message>
<portType name="IVRServicePortSoap">
<operation name="PostActions">
<input message="tns:PostActionsSoapIn" />
<output message="tns:PostActionsSoapOut" />
</operation>
<operation name="PostEvents">
<input message="tns:PostEventsSoapIn" />
<output message="tns:PostEventsSoapOut" />
</operation>
</portType>
<binding name="IVRServicePortSoap" type="tns:IVRServicePortSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<operation name="PostActions">
<soap:operation soapAction="http://testurl/Service:postActionsIn" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
<operation name="PostEvents">
<soap:operation soapAction="http://testurl/Service:postEventsIn" style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<binding name="IVRServicePortSoap12" type="tns:IVRServicePortSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<operation name="PostActions">
<soap12:operation soapAction="http://testurl/Service:postActionsIn" style="document" />
<input>
<soap12:body use="literal" />
</input>
<output>
<soap12:body use="literal" />
</output>
</operation>
<operation name="PostEvents">
<soap12:operation soapAction="http://testurl/Service:postEventsIn" style="document" />
<input>
<soap12:body use="literal" />
</input>
<output>
<soap12:body use="literal" />
</output>
</operation>
</binding>
<service name="IVRServicePort">
<port name="IVRServicePortSoap" binding="tns:IVRServicePortSoap">
<soap:address location="test://" />
</port>
<port name="IVRServicePortSoap12" binding="tns:IVRServicePortSoap12">
<soap12:address location="test://" />
</port>
</service>
</definitions>