dmitry Thu Oct 16 15:36:59 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/soap php_encoding.c Log: Fixed bug #43723 (SOAP not sent properly from client for <choice>) http://cvs.php.net/viewvc.cgi/php-src/ext/soap/php_encoding.c?r1=1.103.2.21.2.37.2.7&r2=1.103.2.21.2.37.2.8&diff_format=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.103.2.21.2.37.2.7 php-src/ext/soap/php_encoding.c:1.103.2.21.2.37.2.8 --- php-src/ext/soap/php_encoding.c:1.103.2.21.2.37.2.7 Wed Oct 1 08:42:48 2008 +++ php-src/ext/soap/php_encoding.c Thu Oct 16 15:36:59 2008 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.103.2.21.2.37.2.7 2008/10/01 08:42:48 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.103.2.21.2.37.2.8 2008/10/16 15:36:59 dmitry Exp $ */ #include <time.h> @@ -361,6 +361,7 @@ static xmlNodePtr master_to_xml_int(encodePtr encode, zval *data, int style, xmlNodePtr parent, int check_class_map) { xmlNodePtr node = NULL; + int add_type = 0; TSRMLS_FETCH(); /* Special handling of class SoapVar */ @@ -451,14 +452,15 @@ encodePtr enc = NULL; if (SOAP_GLOBAL(sdl)) { enc = get_encoder(SOAP_GLOBAL(sdl), SOAP_GLOBAL(sdl)->target_ns, type_name); + if (!enc) { + enc = find_encoder_by_type_name(SOAP_GLOBAL(sdl), type_name); + } } if (enc) { + if (encode != enc && style == SOAP_LITERAL) { + add_type = 1; + } encode = enc; - } else if (SOAP_GLOBAL(sdl)) { - enc = find_encoder_by_type_name(SOAP_GLOBAL(sdl), type_name); - if (enc) { - encode = enc; - } } break; } @@ -485,6 +487,9 @@ } if (encode->to_xml) { node = encode->to_xml(&encode->details, data, style, parent); + if (add_type) { + set_ns_and_type(node, &encode->details); + } } } return node; @@ -1662,6 +1667,13 @@ encodePtr enc; data = get_zval_property(object, model->u.element->name TSRMLS_CC); + if (data && + Z_TYPE_P(data) == IS_NULL && + !model->u.element->nillable && + model->min_occurs > 0 && + !strict) { + return 0; + } if (data) { enc = model->u.element->encode; if ((model->max_occurs == -1 || model->max_occurs > 1) &&
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php