dmitry Thu Jun 9 04:17:37 2005 EDT Modified files: /php-src/ext/soap php_encoding.c /php-src/ext/soap/tests/interop/Round2/Base r2_base_008p.phpt r2_base_008s.phpt Log: Fixed array type autodetection (use namespace name, but not the namespace prefix )
http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.c?r1=1.95&r2=1.96&ty=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.95 php-src/ext/soap/php_encoding.c:1.96 --- php-src/ext/soap/php_encoding.c:1.95 Wed Jun 1 10:43:13 2005 +++ php-src/ext/soap/php_encoding.c Thu Jun 9 04:17:36 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.95 2005/06/01 14:43:13 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.96 2005/06/09 08:17:36 dmitry Exp $ */ #include <time.h> @@ -81,7 +81,7 @@ static xmlNodePtr guess_xml_convert(encodeTypePtr type, zval *data, int style, xmlNodePtr parent); static int is_map(zval *array); -static void get_array_type(xmlNodePtr node, zval *array, smart_str *out_type TSRMLS_DC); +static encodePtr get_array_type(xmlNodePtr node, zval *array, smart_str *out_type TSRMLS_DC); static xmlNodePtr check_and_resolve_href(xmlNodePtr data); @@ -1880,8 +1880,7 @@ enc = elementType->encode; get_type_str(xmlParam, elementType->encode->details.ns, elementType->encode->details.type_str, &array_type); } else { - get_array_type(xmlParam, data, &array_type TSRMLS_CC); - enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c, array_type.len); + enc = get_array_type(xmlParam, data, &array_type TSRMLS_CC); } } else if (sdl_type && sdl_type->elements && zend_hash_num_elements(sdl_type->elements) == 1 && @@ -1900,8 +1899,7 @@ dims[0] = i; } else { - get_array_type(xmlParam, data, &array_type TSRMLS_CC); - enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c, array_type.len); + enc = get_array_type(xmlParam, data, &array_type TSRMLS_CC); smart_str_append_long(&array_size, i); dims = safe_emalloc(sizeof(int), dimension, 0); dims[0] = i; @@ -2886,19 +2884,21 @@ return FALSE; } -static void get_array_type(xmlNodePtr node, zval *array, smart_str *type TSRMLS_DC) +static encodePtr get_array_type(xmlNodePtr node, zval *array, smart_str *type TSRMLS_DC) { - HashTable *ht = HASH_OF(array); + HashTable *ht; int i, count, cur_type, prev_type, different; zval **tmp; char *prev_stype = NULL, *cur_stype = NULL, *prev_ns = NULL, *cur_ns = NULL; if (!array || Z_TYPE_P(array) != IS_ARRAY) { smart_str_appendl(type, "xsd:anyType", 11); + return get_conversion(XSD_ANYTYPE); } different = FALSE; cur_type = prev_type = 0; + ht = HASH_OF(array); count = zend_hash_num_elements(ht); zend_hash_internal_pointer_reset(ht); @@ -2955,20 +2955,33 @@ if (different || count == 0) { smart_str_appendl(type, "xsd:anyType", 11); + return get_conversion(XSD_ANYTYPE); } else { + encodePtr enc; + if (cur_stype != NULL) { + smart_str array_type = {0}; + if (cur_ns) { xmlNsPtr ns = encode_add_ns(node,cur_ns); - smart_str_appends(type,ns->prefix); - smart_str_appendc(type,':'); + + smart_str_appends(type, ns->prefix); + smart_str_appendc(type, ':'); + smart_str_appends(&array_type, cur_ns); + smart_str_appendc(&array_type, ':'); } - smart_str_appends(type,cur_stype); + smart_str_appends(type, cur_stype); smart_str_0(type); - } else { - encodePtr enc; + smart_str_appends(&array_type, cur_stype); + smart_str_0(&array_type); + enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c, array_type.len); + smart_str_free(&array_type); + return enc; + } else { enc = get_conversion(cur_type); get_type_str(node, enc->details.ns, enc->details.type_str, type); + return enc; } } } http://cvs.php.net/diff.php/php-src/ext/soap/tests/interop/Round2/Base/r2_base_008p.phpt?r1=1.1&r2=1.2&ty=u Index: php-src/ext/soap/tests/interop/Round2/Base/r2_base_008p.phpt diff -u php-src/ext/soap/tests/interop/Round2/Base/r2_base_008p.phpt:1.1 php-src/ext/soap/tests/interop/Round2/Base/r2_base_008p.phpt:1.2 --- php-src/ext/soap/tests/interop/Round2/Base/r2_base_008p.phpt:1.1 Sun Apr 3 11:51:19 2005 +++ php-src/ext/soap/tests/interop/Round2/Base/r2_base_008p.phpt Thu Jun 9 04:17:37 2005 @@ -13,7 +13,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:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArray><param0 SOAP-ENC:arrayType="xsd:ur-type[0]" xsi:type="SOAP-ENC:Array"/></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: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:echoStringArray><param0 SOAP-ENC:arrayType="xsd:ur-type[0]" xsi:type="SOAP-ENC:Array"/></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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://soapinterop.org/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArrayResponse><outputStringArray SOAP-ENC:arrayType="xsd:string[0]" xsi:type="ns2:ArrayOfstring"/></ns1:echoStringArrayResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> ok http://cvs.php.net/diff.php/php-src/ext/soap/tests/interop/Round2/Base/r2_base_008s.phpt?r1=1.1&r2=1.2&ty=u Index: php-src/ext/soap/tests/interop/Round2/Base/r2_base_008s.phpt diff -u php-src/ext/soap/tests/interop/Round2/Base/r2_base_008s.phpt:1.1 php-src/ext/soap/tests/interop/Round2/Base/r2_base_008s.phpt:1.2 --- php-src/ext/soap/tests/interop/Round2/Base/r2_base_008s.phpt:1.1 Sun Apr 3 11:51:19 2005 +++ php-src/ext/soap/tests/interop/Round2/Base/r2_base_008s.phpt Thu Jun 9 04:17:37 2005 @@ -15,7 +15,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:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://soapinterop.org/xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArray><inputStringArray SOAP-ENC:arrayType="xsd:ur-type[0]" 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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://soapinterop.org/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArray><inputStringArray SOAP-ENC:arrayType="xsd:ur-type[0]" 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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://soapinterop.org/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:echoStringArrayResponse><outputStringArray SOAP-ENC:arrayType="xsd:string[0]" xsi:type="ns2:ArrayOfstring"/></ns1:echoStringArrayResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> ok
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php