dmitry Tue Mar 20 09:52:33 2007 UTC Modified files: /php-src/ext/soap php_encoding.c php_soap.h soap.c /php-src/ext/soap/tests/interop/Round2/Base r2_base_009s.phpt /php-src/ext/soap/tests/schema schema081.phpt schema082.phpt schema083.phpt schema084.phpt test_schema.inc Log: Added ability to encode arrays with "SOAP-ENC:Array" type instead of WSDL type. To activate the ability use "feature"=>SOAP_USE_XSI_ARRAY_TYPE option in SoapClient/SoapServer constructors.
http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.155&r2=1.156&diff_format=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.155 php-src/ext/soap/php_encoding.c:1.156 --- php-src/ext/soap/php_encoding.c:1.155 Tue Mar 20 07:51:47 2007 +++ php-src/ext/soap/php_encoding.c Tue Mar 20 09:52:33 2007 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.155 2007/03/20 07:51:47 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.156 2007/03/20 09:52:33 dmitry Exp $ */ #include <time.h> @@ -1622,6 +1622,7 @@ xmlAddChild(parent, xmlParam); if (style == SOAP_ENCODED) { set_xsi_nil(xmlParam); + set_ns_and_type(xmlParam, type); } return xmlParam; } @@ -2016,7 +2017,17 @@ xmlParam = xmlNewNode(NULL, BAD_CAST("BOGUS")); xmlAddChild(parent, xmlParam); - FIND_ZVAL_NULL(data, xmlParam, style); + if (!data || Z_TYPE_P(data) == IS_NULL) { + if (style == SOAP_ENCODED) { + set_xsi_nil(xmlParam); + if (SOAP_GLOBAL(features) & SOAP_USE_XSI_ARRAY_TYPE) { + set_ns_and_type_ex(xmlParam, (soap_version == SOAP_1_1) ? SOAP_1_1_ENC_NAMESPACE : SOAP_1_2_ENC_NAMESPACE, "Array"); + } else { + set_ns_and_type(xmlParam, type); + } + } + return xmlParam; + } if (Z_TYPE_P(data) == IS_ARRAY) { sdlAttributePtr *arrayType; @@ -2189,7 +2200,11 @@ efree(dims); } if (style == SOAP_ENCODED) { - set_ns_and_type(xmlParam, type); + if (SOAP_GLOBAL(features) & SOAP_USE_XSI_ARRAY_TYPE) { + set_ns_and_type_ex(xmlParam, (soap_version == SOAP_1_1) ? SOAP_1_1_ENC_NAMESPACE : SOAP_1_2_ENC_NAMESPACE, "Array"); + } else { + set_ns_and_type(xmlParam, type); + } } return xmlParam; } @@ -3014,9 +3029,9 @@ if (type->encode && (type->encode->details.type == IS_ARRAY || type->encode->details.type == SOAP_ENC_ARRAY)) { - ret = to_xml_array(enc, data, style, parent); + return to_xml_array(enc, data, style, parent); } else { - ret = to_xml_object(enc, data, style, parent); + return to_xml_object(enc, data, style, parent); } break; default: http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_soap.h?r1=1.50&r2=1.51&diff_format=u Index: php-src/ext/soap/php_soap.h diff -u php-src/ext/soap/php_soap.h:1.50 php-src/ext/soap/php_soap.h:1.51 --- php-src/ext/soap/php_soap.h:1.50 Mon Jan 1 09:29:29 2007 +++ php-src/ext/soap/php_soap.h Tue Mar 20 09:52:33 2007 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_soap.h,v 1.50 2007/01/01 09:29:29 sebastian Exp $ */ +/* $Id: php_soap.h,v 1.51 2007/03/20 09:52:33 dmitry Exp $ */ #ifndef PHP_SOAP_H #define PHP_SOAP_H @@ -192,7 +192,8 @@ #define SOAP_AUTHENTICATION_DIGEST 1 #define SOAP_SINGLE_ELEMENT_ARRAYS (1<<0) -#define SOAP_WAIT_ONE_WAY_CALLS (2<<0) +#define SOAP_WAIT_ONE_WAY_CALLS (1<<1) +#define SOAP_USE_XSI_ARRAY_TYPE (1<<2) #define WSDL_CACHE_NONE 0x0 #define WSDL_CACHE_DISK 0x1 http://cvs.php.net/viewvc.cgi/php-src/ext/soap/soap.c?r1=1.219&r2=1.220&diff_format=u Index: php-src/ext/soap/soap.c diff -u php-src/ext/soap/soap.c:1.219 php-src/ext/soap/soap.c:1.220 --- php-src/ext/soap/soap.c:1.219 Sat Feb 24 16:25:55 2007 +++ php-src/ext/soap/soap.c Tue Mar 20 09:52:33 2007 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: soap.c,v 1.219 2007/02/24 16:25:55 helly Exp $ */ +/* $Id: soap.c,v 1.220 2007/03/20 09:52:33 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -862,6 +862,7 @@ REGISTER_LONG_CONSTANT("SOAP_SINGLE_ELEMENT_ARRAYS", SOAP_SINGLE_ELEMENT_ARRAYS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("SOAP_WAIT_ONE_WAY_CALLS", SOAP_WAIT_ONE_WAY_CALLS, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SOAP_USE_XSI_ARRAY_TYPE", SOAP_USE_XSI_ARRAY_TYPE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("WSDL_CACHE_NONE", WSDL_CACHE_NONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("WSDL_CACHE_DISK", WSDL_CACHE_DISK, CONST_CS | CONST_PERSISTENT); http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt diff -u php-src/ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt:1.3 php-src/ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt:1.4 --- php-src/ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt:1.3 Fri May 26 09:04:54 2006 +++ php-src/ext/soap/tests/interop/Round2/Base/r2_base_009s.phpt Tue Mar 20 09:52:33 2007 @@ -14,7 +14,7 @@ ?> --EXPECT-- <?xml version="1.0" encoding="UTF-8"?> -<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soapinterop.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://soapinterop.org/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArray><inputStringArray xsi:nil="true" xsi:type="ns2:ArrayOfstring"/></ns1:echoStringArray></SOAP-ENV:Body></SOAP-ENV:Envelope> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soapinterop.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://soapinterop.org/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArray><inputStringArray xsi:nil="true" xsi:type="ns2:ArrayOfstring"/></ns1:echoStringArray></SOAP-ENV:Body></SOAP-ENV:Envelope> <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://soapinterop.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://soapinterop.org/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArrayResponse><outputStringArray xsi:nil="true" xsi:type="ns2:ArrayOfstring"/></ns1:echoStringArrayResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> ok http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/schema/schema081.phpt?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/soap/tests/schema/schema081.phpt diff -u /dev/null php-src/ext/soap/tests/schema/schema081.phpt:1.4 --- /dev/null Tue Mar 20 09:52:33 2007 +++ php-src/ext/soap/tests/schema/schema081.phpt Tue Mar 20 09:52:33 2007 @@ -0,0 +1,29 @@ +--TEST-- +SOAP XML Schema 81: SOAP 1.1 Array with SOAP_USE_XSI_ARRAY_TYPE +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +include "test_schema.inc"; +$schema = <<<EOF + <complexType name="testType"> + <complexContent> + <restriction base="SOAP-ENC:Array"> + <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="int[]"/> + </restriction> + </complexContent> + </complexType> +EOF; +test_schema($schema,'type="tns:testType"',array(123,123.5),"rpc","encoded",'',SOAP_USE_XSI_ARRAY_TYPE); +echo "ok"; +?> +--EXPECT-- +<?xml version="1.0" encoding="UTF-8"?> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="SOAP-ENC:Array"><item xsi:type="xsd:int">123</item><item xsi:type="xsd:int">123</item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope> +array(2) { + [0]=> + int(123) + [1]=> + int(123) +} +ok http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/schema/schema082.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/soap/tests/schema/schema082.phpt diff -u /dev/null php-src/ext/soap/tests/schema/schema082.phpt:1.2 --- /dev/null Tue Mar 20 09:52:33 2007 +++ php-src/ext/soap/tests/schema/schema082.phpt Tue Mar 20 09:52:33 2007 @@ -0,0 +1,31 @@ +--TEST-- +SOAP XML Schema 82: SOAP 1.1 Array with SOAP_USE_XSI_ARRAY_TYPE (second way) +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +include "test_schema.inc"; +$schema = <<<EOF + <complexType name="testType"> + <complexContent> + <restriction base="SOAP-ENC:Array"> + <all> + <element name="x_item" type="int" maxOccurs="unbounded"/> + </all> + </restriction> + </complexContent> + </complexType> +EOF; +test_schema($schema,'type="tns:testType"',array(123,123.5),"rpc","encoded",'',SOAP_USE_XSI_ARRAY_TYPE); +echo "ok"; +?> +--EXPECT-- +<?xml version="1.0" encoding="UTF-8"?> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="SOAP-ENC:Array"><x_item xsi:type="xsd:int">123</x_item><x_item xsi:type="xsd:int">123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope> +array(2) { + [0]=> + int(123) + [1]=> + int(123) +} +ok http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/schema/schema083.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/soap/tests/schema/schema083.phpt diff -u /dev/null php-src/ext/soap/tests/schema/schema083.phpt:1.2 --- /dev/null Tue Mar 20 09:52:33 2007 +++ php-src/ext/soap/tests/schema/schema083.phpt Tue Mar 20 09:52:33 2007 @@ -0,0 +1,30 @@ +--TEST-- +SOAP XML Schema 83: SOAP 1.2 Array with SOAP_USE_XSI_ARRAY_TYPE +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +include "test_schema.inc"; +$schema = <<<EOF + <complexType name="testType"> + <complexContent> + <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding"> + <attribute ref="enc12:itemType" wsdl:itemType="int"/> + <attribute ref="enc12:arraySize" wsdl:arraySize="*"/> + </restriction> + </complexContent> + </complexType> +EOF; +test_schema($schema,'type="tns:testType"',array(123,123.5),"rpc","encoded",'',SOAP_USE_XSI_ARRAY_TYPE); +echo "ok"; +?> +--EXPECT-- +<?xml version="1.0" encoding="UTF-8"?> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="SOAP-ENC:Array"><item xsi:type="xsd:int">123</item><item xsi:type="xsd:int">123</item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope> +array(2) { + [0]=> + int(123) + [1]=> + int(123) +} +ok http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/schema/schema084.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/soap/tests/schema/schema084.phpt diff -u /dev/null php-src/ext/soap/tests/schema/schema084.phpt:1.2 --- /dev/null Tue Mar 20 09:52:33 2007 +++ php-src/ext/soap/tests/schema/schema084.phpt Tue Mar 20 09:52:33 2007 @@ -0,0 +1,31 @@ +--TEST-- +SOAP XML Schema 84: SOAP 1.2 Array with SOAP_USE_XSI_ARRAY_TYPE (second way) +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +include "test_schema.inc"; +$schema = <<<EOF + <complexType name="testType"> + <complexContent> + <restriction base="enc12:Array" xmlns:enc12="http://www.w3.org/2003/05/soap-encoding"> + <all> + <element name="x_item" type="int" maxOccurs="unbounded"/> + </all> + </restriction> + </complexContent> + </complexType> +EOF; +test_schema($schema,'type="tns:testType"',array(123,123.5),"rpc","encoded",'',SOAP_USE_XSI_ARRAY_TYPE); +echo "ok"; +?> +--EXPECT-- +<?xml version="1.0" encoding="UTF-8"?> +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://test-uri/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:test><testParam SOAP-ENC:arrayType="xsd:int[2]" xsi:type="SOAP-ENC:Array"><x_item xsi:type="xsd:int">123</x_item><x_item xsi:type="xsd:int">123</x_item></testParam></ns1:test></SOAP-ENV:Body></SOAP-ENV:Envelope> +array(2) { + [0]=> + int(123) + [1]=> + int(123) +} +ok http://cvs.php.net/viewvc.cgi/php-src/ext/soap/tests/schema/test_schema.inc?r1=1.10&r2=1.11&diff_format=u Index: php-src/ext/soap/tests/schema/test_schema.inc diff -u php-src/ext/soap/tests/schema/test_schema.inc:1.10 php-src/ext/soap/tests/schema/test_schema.inc:1.11 --- php-src/ext/soap/tests/schema/test_schema.inc:1.10 Thu Jul 13 16:47:26 2006 +++ php-src/ext/soap/tests/schema/test_schema.inc Tue Mar 20 09:52:33 2007 @@ -6,7 +6,7 @@ $val = $input; } -function test_schema($schema,$type,$param,$style="rpc",$use="encoded", $attributeFormDefault='') { +function test_schema($schema,$type,$param,$style="rpc",$use="encoded", $attributeFormDefault='',$features=0) { global $HTTP_RAW_POST_DATA, $val; $wsdl = <<<EOF <definitions name="InteropTest" @@ -55,8 +55,8 @@ @fwrite($f,$wsdl); fclose($f); ini_set("soap.wsdl_cache_enabled",0); - $x = new SoapClient($fname, array("trace"=>1,"exceptions"=>0)); - $y = new SoapServer($fname); + $x = new SoapClient($fname, array("trace"=>1,"exceptions"=>0,"features"=>$features)); + $y = new SoapServer($fname, array("features"=>$features)); $y->addfunction("test"); unlink($fname);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php