dmitry Tue Feb 24 04:02:36 2004 EDT
Modified files:
/php-src/ext/soap TODO php_encoding.c php_schema.c
Log:
XML Schema support was improved: support for <element> default, fixed and nillable
http://cvs.php.net/diff.php/php-src/ext/soap/TODO?r1=1.45&r2=1.46&ty=u
Index: php-src/ext/soap/TODO
diff -u php-src/ext/soap/TODO:1.45 php-src/ext/soap/TODO:1.46
--- php-src/ext/soap/TODO:1.45 Thu Feb 19 03:21:12 2004
+++ php-src/ext/soap/TODO Tue Feb 24 04:02:33 2004
@@ -41,7 +41,7 @@
SOAP 1.2 doesn't support partially transmitted and sparse arrays
- references to external resources
? support for "nillable" and "nil"
-- default values of <element>
+? default values of <element>
? provide schema 1999/2001 support???
? make internal refrences for soap encoding (use seralization logic)???
? provide user space overriding of serialization certin objects and types???
http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.c?r1=1.62&r2=1.63&ty=u
Index: php-src/ext/soap/php_encoding.c
diff -u php-src/ext/soap/php_encoding.c:1.62 php-src/ext/soap/php_encoding.c:1.63
--- php-src/ext/soap/php_encoding.c:1.62 Thu Feb 19 06:32:42 2004
+++ php-src/ext/soap/php_encoding.c Tue Feb 24 04:02:33 2004
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_encoding.c,v 1.62 2004/02/19 11:32:42 dmitry Exp $ */
+/* $Id: php_encoding.c,v 1.63 2004/02/24 09:02:33 dmitry Exp $ */
#include <time.h>
@@ -791,7 +791,24 @@
if (node) {
zval *val;
- val = master_to_zval(model->u.element->encode,
node);
+ if (node && node->children &&
node->children->content) {
+ if (model->u.element->fixed &&
strcmp(model->u.element->fixed,node->children->content) != 0) {
+ php_error(E_ERROR,"SOAP-ERROR:
Encoding: Element '%s' has fixed value '%s' (value '%s' is not
allowed)",model->u.element->name,model->u.element->fixed,node->children->content);
+ }
+ val =
master_to_zval(model->u.element->encode, node);
+ } else if (model->u.element->fixed) {
+ xmlNodePtr dummy = xmlNewNode(NULL,
"BOGUS");
+ xmlNodeSetContent(dummy,
model->u.element->fixed);
+ val =
master_to_zval(model->u.element->encode, dummy);
+ xmlFreeNode(dummy);
+ } else if (model->u.element->def &&
!model->u.element->nillable) {
+ xmlNodePtr dummy = xmlNewNode(NULL,
"BOGUS");
+ xmlNodeSetContent(dummy,
model->u.element->def);
+ val =
master_to_zval(model->u.element->encode, dummy);
+ xmlFreeNode(dummy);
+ } else {
+ val =
master_to_zval(model->u.element->encode, node);
+ }
if ((node = get_node(node->next,
model->u.element->name)) != NULL) {
zval *array;
@@ -799,7 +816,24 @@
array_init(array);
add_next_index_zval(array, val);
do {
- val =
master_to_zval(model->u.element->encode, node);
+ if (node && node->children &&
node->children->content) {
+ if
(model->u.element->fixed && strcmp(model->u.element->fixed,node->children->content) !=
0) {
+
php_error(E_ERROR,"SOAP-ERROR: Encoding: Element '%s' has fixed value '%s' (value '%s'
is not
allowed)",model->u.element->name,model->u.element->fixed,node->children->content);
+ }
+ val =
master_to_zval(model->u.element->encode, node);
+ } else if
(model->u.element->fixed) {
+ xmlNodePtr dummy =
xmlNewNode(NULL, "BOGUS");
+
xmlNodeSetContent(dummy, model->u.element->fixed);
+ val =
master_to_zval(model->u.element->encode, dummy);
+ xmlFreeNode(dummy);
+ } else if
(model->u.element->def && !model->u.element->nillable) {
+ xmlNodePtr dummy =
xmlNewNode(NULL, "BOGUS");
+
xmlNodeSetContent(dummy, model->u.element->def);
+ val =
master_to_zval(model->u.element->encode, dummy);
+ xmlFreeNode(dummy);
+ } else {
+ val =
master_to_zval(model->u.element->encode, node);
+ }
add_next_index_zval(array,
val);
} while ((node = get_node(node->next,
model->u.element->name)) != NULL);
val = array;
@@ -912,6 +946,8 @@
if ((*attr)->fixed &&
strcmp((*attr)->fixed,str_val) != 0) {
php_error(E_ERROR,"SOAP-ERROR:
Encoding: Attribute '%s' has fixed value '%s' (value '%s' is not
allowed)",(*attr)->name,(*attr)->fixed,str_val);
}
+ } else if ((*attr)->fixed) {
+ str_val = (*attr)->fixed;
} else if ((*attr)->def) {
str_val = (*attr)->def;
}
@@ -983,6 +1019,10 @@
}
} else {
property = master_to_xml(enc,
*val, style, node);
+ if (property->children &&
property->children->content &&
+ model->u.element->fixed &&
strcmp(model->u.element->fixed,property->children->content) != 0) {
+
php_error(E_ERROR,"SOAP-ERROR: Encoding: Element '%s' has fixed value '%s' (value '%s'
is not
allowed)",model->u.element->name,model->u.element->fixed,property->children->content);
+ }
}
xmlNodeSetName(property,
model->u.element->name);
if (style == SOAP_LITERAL &&
model->u.element->namens) {
@@ -1003,6 +1043,10 @@
}
} else {
property = master_to_xml(enc, *data,
style, node);
+ if (property->children &&
property->children->content &&
+ model->u.element->fixed &&
strcmp(model->u.element->fixed,property->children->content) != 0) {
+ php_error(E_ERROR,"SOAP-ERROR:
Encoding: Element '%s' has fixed value '%s' (value '%s' is not
allowed)",model->u.element->name,model->u.element->fixed,property->children->content);
+ }
}
xmlNodeSetName(property,
model->u.element->name);
if (style == SOAP_LITERAL &&
model->u.element->namens) {
http://cvs.php.net/diff.php/php-src/ext/soap/php_schema.c?r1=1.44&r2=1.45&ty=u
Index: php-src/ext/soap/php_schema.c
diff -u php-src/ext/soap/php_schema.c:1.44 php-src/ext/soap/php_schema.c:1.45
--- php-src/ext/soap/php_schema.c:1.44 Tue Feb 17 10:10:16 2004
+++ php-src/ext/soap/php_schema.c Tue Feb 24 04:02:33 2004
@@ -17,7 +17,7 @@
| Dmitry Stogov <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_schema.c,v 1.44 2004/02/17 15:10:16 dmitry Exp $ */
+/* $Id: php_schema.c,v 1.45 2004/02/24 09:02:33 dmitry Exp $ */
#include "php_soap.h"
#include "libxml/uri.h"
@@ -2133,11 +2133,17 @@
if (type->ref != NULL) {
if (ctx->sdl->elements != NULL) {
if (zend_hash_find(ctx->sdl->elements, type->ref,
strlen(type->ref)+1, (void**)&tmp) == SUCCESS) {
+ type->kind = (*tmp)->kind;
type->encode = (*tmp)->encode;
- /* TODO: nillable */
if ((*tmp)->nillable) {
type->nillable = 1;
}
+ if ((*tmp)->fixed) {
+ type->fixed = estrdup((*tmp)->fixed);
+ }
+ if ((*tmp)->def) {
+ type->def = estrdup((*tmp)->def);
+ }
} else {
php_error(E_ERROR, "SOAP-ERROR: Parsing Schema:
unresolved element 'ref' attribute");
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php