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