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

Reply via email to