cvs: php-src(PHP_5_1) /ext/soap php_encoding.c /ext/soap/tests classmap003.phpt classmap003.wsdl
| From: | Dmitry Stogov | Date: | Wed, 01 Feb 2006 17:18:24 +0000 |
| Subject: | cvs: php-src(PHP_5_1) /ext/soap php_encoding.c /ext/soap/tests classmap003.phpt classmap003.wsdl | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-36716@lists.php.net to get a copy of this message | ||
dmitry Wed Feb 1 17:18:24 2006 UTC
Added files: (Branch: PHP_5_1)
/php-src/ext/soap/tests classmap003.phpt classmap003.wsdl
Modified files:
/php-src/ext/soap php_encoding.c
Log:
Fixed encoding of inhereted objects
http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/php_encoding.c?r1=1.103.2.13&r2=1.103.2.14&diff_format=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.103.2.13 php-src/ext/soap/php_encoding.c:1.103.2.14
--- php-src/ext/soap/php_encoding.c:1.103.2.13 Sun Jan 1 12:50:13 2006
+++ php-src/ext/soap/php_encoding.c Wed Feb 1 17:18:24 2006
@@ -17,7 +17,7 @@
| Dmitry Stogov <dmitry@zend.com> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_encoding.c,v 1.103.2.13 2006/01/01 12:50:13 sniper Exp $ */
+/* $Id: php_encoding.c,v 1.103.2.14 2006/02/01 17:18:24 dmitry Exp $ */
#include <time.h>
@@ -306,6 +306,34 @@
xmlSetNs(node, nsp);
}
} else {
+ if (SOAP_GLOBAL(class_map) && data &&
+ Z_TYPE_P(data) == IS_OBJECT &&
+ !Z_OBJPROP_P(data)->nApplyCount) {
+ zend_class_entry *ce = Z_OBJCE_P(data);
+ HashPosition pos;
+ zval **tmp;
+ char *type_name = NULL;
+ uint type_len;
+ ulong idx;
+
+ for (zend_hash_internal_pointer_reset_ex(SOAP_GLOBAL(class_map), &pos);
+ zend_hash_get_current_data_ex(SOAP_GLOBAL(class_map), (void **) &tmp, &pos) ==
SUCCESS;
+ zend_hash_move_forward_ex(SOAP_GLOBAL(class_map), &pos)) {
+ if (Z_TYPE_PP(tmp) == IS_STRING &&
+ ce->name_length == Z_STRLEN_PP(tmp) &&
+ zend_binary_strncasecmp(ce->name, ce->name_length, Z_STRVAL_PP(tmp),
ce->name_length, ce->name_length) == 0 &&
+ zend_hash_get_current_key_ex(SOAP_GLOBAL(class_map), &type_name, &type_len,
&idx, 0, &pos) == HASH_KEY_IS_STRING) {
+
+ /* TODO: namespace isn't stored */
+ encodePtr enc = get_encoder(SOAP_GLOBAL(sdl), SOAP_GLOBAL(sdl)->target_ns, type_name);
+ if (enc) {
+ encode = &enc->details;
+ }
+ break;
+ }
+ }
+ }
+
if (encode == NULL) {
encode = get_conversion(UNKNOWN_TYPE);
}
@@ -1220,9 +1248,9 @@
ret = master_to_zval_int(sdlType->encode, data);
FIND_XML_NULL(data, ret);
if (get_zval_property(ret, "any" TSRMLS_CC) != NULL) {
- unset_zval_property(ret, "any" TSRMLS_CC);
+ unset_zval_property(ret, "any" TSRMLS_CC);
redo_any = 1;
- }
+ }
if (Z_TYPE_P(ret) == IS_OBJECT && ce != ZEND_STANDARD_CLASS_DEF_PTR) {
zend_object *zobj = zend_objects_get_address(ret TSRMLS_CC);
zobj->ce = ce;
@@ -1526,7 +1554,7 @@
static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNodePtr parent)
{
xmlNodePtr xmlParam;
- HashTable *prop;
+ HashTable *prop = NULL;
int i;
sdlTypePtr sdlType = type->sdl_type;
TSRMLS_FETCH();
@@ -1534,19 +1562,19 @@
if (!data || Z_TYPE_P(data) == IS_NULL) {
xmlParam = xmlNewNode(NULL,"BOGUS");
xmlAddChild(parent, xmlParam);
- if (style == SOAP_ENCODED) {
+ if (style == SOAP_ENCODED) {
xmlSetProp(xmlParam, "xsi:nil", "true");
}
return xmlParam;
}
+ if (Z_TYPE_P(data) == IS_OBJECT) {
+ prop = Z_OBJPROP_P(data);
+ } else if (Z_TYPE_P(data) == IS_ARRAY) {
+ prop = Z_ARRVAL_P(data);
+ }
+
if (sdlType) {
- prop = NULL;
- if (Z_TYPE_P(data) == IS_OBJECT) {
- prop = Z_OBJPROP_P(data);
- } else if (Z_TYPE_P(data) == IS_ARRAY) {
- prop = Z_ARRVAL_P(data);
- }
if (sdlType->kind == XSD_TYPEKIND_RESTRICTION &&
sdlType->encode && type != &sdlType->encode->details) {
encodePtr enc;
@@ -1562,7 +1590,7 @@
zval *tmp = get_zval_property(data, "_" TSRMLS_CC);
if (tmp) {
xmlParam = master_to_xml(enc, tmp, style, parent);
- } else if (prop == NULL) {
+ } else if (prop == NULL) {
xmlParam = master_to_xml(enc, data, style, parent);
} else {
xmlParam = xmlNewNode(NULL,"BOGUS");
@@ -1578,7 +1606,10 @@
sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE &&
sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST &&
sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) {
+
+ if (prop) prop->nApplyCount++;
xmlParam = master_to_xml(sdlType->encode, data, style, parent);
+ if (prop) prop->nApplyCount--;
} else {
zval *tmp = get_zval_property(data, "_" TSRMLS_CC);
@@ -1595,7 +1626,6 @@
xmlParam = xmlNewNode(NULL,"BOGUS");
xmlAddChild(parent, xmlParam);
}
- FIND_ZVAL_NULL(data, xmlParam, style);
if (prop != NULL) {
sdlTypePtr array_el;
@@ -1678,14 +1708,7 @@
} else {
xmlParam = xmlNewNode(NULL,"BOGUS");
xmlAddChild(parent, xmlParam);
- FIND_ZVAL_NULL(data, xmlParam, style);
- prop = NULL;
- if (Z_TYPE_P(data) == IS_OBJECT) {
- prop = Z_OBJPROP_P(data);
- } else if (Z_TYPE_P(data) == IS_ARRAY) {
- prop = Z_ARRVAL_P(data);
- }
if (prop != NULL) {
i = zend_hash_num_elements(prop);
zend_hash_internal_pointer_reset(prop);
http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/tests/classmap003.phpt?view=markup&rev=1.1
Index: php-src/ext/soap/tests/classmap003.phpt
+++ php-src/ext/soap/tests/classmap003.phpt
http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/tests/classmap003.wsdl?view=markup&rev=1.1
Index: php-src/ext/soap/tests/classmap003.wsdl
+++ php-src/ext/soap/tests/classmap003.wsdl