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