dmitry Thu Jun 9 04:17:12 2005 EDT
Modified files: (Branch: PHP_5_0)
/php-src/ext/soap php_encoding.c
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.71.2.19&r2=1.71.2.20&ty=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.71.2.19
php-src/ext/soap/php_encoding.c:1.71.2.20
--- php-src/ext/soap/php_encoding.c:1.71.2.19 Wed Jun 1 10:42:49 2005
+++ php-src/ext/soap/php_encoding.c Thu Jun 9 04:17:09 2005
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_encoding.c,v 1.71.2.19 2005/06/01 14:42:49 dmitry Exp $ */
+/* $Id: php_encoding.c,v 1.71.2.20 2005/06/09 08:17:09 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;
}
}
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php