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