dmitry Mon Mar 21 10:52:54 2005 EDT Modified files: /php-src/ext/soap php_sdl.c php_sdl.h /php-src/ext/soap/tests/bugs bug30928.wsdl /php-src/ext/soap/tests/schema test_schema.inc Log: Support for <soap:body> "parts" attribute http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.c?r1=1.79&r2=1.80&ty=u Index: php-src/ext/soap/php_sdl.c diff -u php-src/ext/soap/php_sdl.c:1.79 php-src/ext/soap/php_sdl.c:1.80 --- php-src/ext/soap/php_sdl.c:1.79 Thu Mar 17 03:15:23 2005 +++ php-src/ext/soap/php_sdl.c Mon Mar 21 10:52:50 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_sdl.c,v 1.79 2005/03/17 08:15:23 sniper Exp $ */ +/* $Id: php_sdl.c,v 1.80 2005/03/21 15:52:50 dmitry Exp $ */ #include "php_soap.h" #include "ext/libxml/php_libxml.h" @@ -480,8 +480,43 @@ tmp = get_attribute(body->properties, "parts"); if (tmp) { - whiteSpace_collapse(tmp->children->content); - binding->parts = estrdup(tmp->children->content); + HashTable ht; + char *parts = tmp->children->content; + + /* Delete all parts those are not in the "parts" attribute */ + zend_hash_init(&ht, 0, NULL, delete_parameter, 0); + while (*parts) { + HashPosition pos; + sdlParamPtr *param; + int found = 0; + char *end; + + while (*parts == ' ') ++parts; + if (*parts == '\0') break; + end = strchr(parts, ' '); + if (end) *end = '\0'; + zend_hash_internal_pointer_reset_ex(params, &pos); + while (zend_hash_get_current_data_ex(params, (void **)¶m, &pos) != FAILURE) { + if ((*param)->paramName && + strcmp(parts, (*param)->paramName) == 0) { + sdlParamPtr x_param; + x_param = emalloc(sizeof(sdlParam)); + *x_param = **param; + (*param)->paramName = NULL; + zend_hash_next_index_insert(&ht, &x_param, sizeof(sdlParamPtr), NULL); + found = 1; + break; + } + zend_hash_move_forward_ex(params, &pos); + } + if (!found) { + soap_error1(E_ERROR, "Parsing WSDL: Missing part '%s' in <message>", parts); + } + parts += strlen(parts); + if (end) *end = ' '; + } + zend_hash_destroy(params); + *params = ht; } if (binding->use == SOAP_ENCODED) { @@ -1026,7 +1061,7 @@ return ctx.sdl; } -#define WSDL_CACHE_VERSION 0x0a +#define WSDL_CACHE_VERSION 0x0b #define WSDL_CACHE_GET(ret,type,buf) memcpy(&ret,*buf,sizeof(type)); *buf += sizeof(type); #define WSDL_CACHE_GET_INT(ret,buf) ret = ((unsigned char)(*buf)[0])|((unsigned char)(*buf)[1]<<8)|((unsigned char)(*buf)[2]<<16)|((int)(*buf)[3]<<24); *buf += 4; @@ -1274,7 +1309,6 @@ body->encodingStyle = SOAP_ENCODING_DEFAULT; } body->ns = sdl_deserialize_string(in); - body->parts = sdl_deserialize_string(in); WSDL_CACHE_GET_INT(i, in); if (i > 0) { body->headers = emalloc(sizeof(HashTable)); @@ -1875,7 +1909,6 @@ WSDL_CACHE_PUT_1(body->encodingStyle, out); } sdl_serialize_string(body->ns, out); - sdl_serialize_string(body->parts, out); if (body->headers) { i = zend_hash_num_elements(body->headers); } else { @@ -2310,9 +2343,6 @@ if (body.ns) { efree(body.ns); } - if (body.parts) { - efree(body.parts); - } if (body.headers) { zend_hash_destroy(body.headers); efree(body.headers); http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.h?r1=1.33&r2=1.34&ty=u Index: php-src/ext/soap/php_sdl.h diff -u php-src/ext/soap/php_sdl.h:1.33 php-src/ext/soap/php_sdl.h:1.34 --- php-src/ext/soap/php_sdl.h:1.33 Tue Nov 9 03:13:35 2004 +++ php-src/ext/soap/php_sdl.h Mon Mar 21 10:52:50 2005 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_sdl.h,v 1.33 2004/11/09 08:13:35 dmitry Exp $ */ +/* $Id: php_sdl.h,v 1.34 2005/03/21 15:52:50 dmitry Exp $ */ #ifndef PHP_SDL_H #define PHP_SDL_H @@ -109,7 +109,6 @@ struct _sdlSoapBindingFunctionBody { char *ns; sdlEncodingUse use; - char *parts; /* not implemented yet */ sdlRpcEncodingStyle encodingStyle; /* not implemented yet */ HashTable *headers; /* array of sdlSoapBindingFunctionHeaderPtr */ }; http://cvs.php.net/diff.php/php-src/ext/soap/tests/bugs/bug30928.wsdl?r1=1.2&r2=1.3&ty=u Index: php-src/ext/soap/tests/bugs/bug30928.wsdl diff -u php-src/ext/soap/tests/bugs/bug30928.wsdl:1.2 php-src/ext/soap/tests/bugs/bug30928.wsdl:1.3 --- php-src/ext/soap/tests/bugs/bug30928.wsdl:1.2 Tue Dec 7 12:29:42 2004 +++ php-src/ext/soap/tests/bugs/bug30928.wsdl Mon Mar 21 10:52:53 2005 @@ -34,10 +34,10 @@ <operation name="test"> <soap:operation soapAction="#test" style="rpc"/> <input> - <soap:body parts="body" use="encoded" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + <soap:body use="encoded" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> - <soap:body parts="body" use="encoded" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + <soap:body use="encoded" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> http://cvs.php.net/diff.php/php-src/ext/soap/tests/schema/test_schema.inc?r1=1.7&r2=1.8&ty=u Index: php-src/ext/soap/tests/schema/test_schema.inc diff -u php-src/ext/soap/tests/schema/test_schema.inc:1.7 php-src/ext/soap/tests/schema/test_schema.inc:1.8 --- php-src/ext/soap/tests/schema/test_schema.inc:1.7 Thu Jan 20 07:48:01 2005 +++ php-src/ext/soap/tests/schema/test_schema.inc Mon Mar 21 10:52:53 2005 @@ -37,7 +37,7 @@ <operation name="test"> <soap:operation soapAction="#test" style="$style"/> <input> - <soap:body parts="body" use="$use" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> + <soap:body use="$use" namespace="http://test-uri/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> </operation> </binding>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php