diff options
author | Damien Laniel <dlaniel@entrouvert.com> | 2007-09-21 16:37:18 +0000 |
---|---|---|
committer | Damien Laniel <dlaniel@entrouvert.com> | 2007-09-21 16:37:18 +0000 |
commit | ea85ed6cfca60d711d3bb5655e1599dda30927f9 (patch) | |
tree | d0c85e7d26382653b7eb3a8ba7233061f7aff680 | |
parent | 7d3f2e99f5bd3575d830048f180d877f30841d5b (diff) | |
download | lasso-ea85ed6cfca60d711d3bb5655e1599dda30927f9.tar.gz lasso-ea85ed6cfca60d711d3bb5655e1599dda30927f9.tar.xz lasso-ea85ed6cfca60d711d3bb5655e1599dda30927f9.zip |
fixed id-wsf 1 data service modify
-rw-r--r-- | lasso/id-wsf/data_service.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lasso/id-wsf/data_service.c b/lasso/id-wsf/data_service.c index 9fa08a7e..2cb4c1b0 100644 --- a/lasso/id-wsf/data_service.c +++ b/lasso/id-wsf/data_service.c @@ -683,13 +683,21 @@ lasso_data_service_build_modify_response_msg(LassoDataService *service) LassoDstModifyResponse *response; LassoSoapEnvelope *envelope; GList *iter; + xmlNode *cur_data; xmlDoc *doc; xmlXPathContext *xpathCtx; xmlXPathObject *xpathObj; + int res = 0; profile = LASSO_WSF_PROFILE(service); request = LASSO_DST_MODIFY(profile->request); + if (service->resource_data == NULL) { + return LASSO_DST_ERROR_MISSING_SERVICE_DATA; + } else { + cur_data = xmlCopyNode(service->resource_data, 1); + } + response = lasso_dst_modify_response_new( lasso_utility_status_new(LASSO_DST_STATUS_CODE_OK)); profile->response = LASSO_NODE(response); @@ -699,12 +707,12 @@ lasso_data_service_build_modify_response_msg(LassoDataService *service) envelope->Body->any = g_list_append(envelope->Body->any, response); doc = xmlNewDoc((xmlChar*)"1.0"); - xmlDocSetRootElement(doc, service->resource_data); + xmlDocSetRootElement(doc, cur_data); xpathCtx = xmlXPathNewContext(doc); xmlXPathRegisterNs(xpathCtx, (xmlChar*)response->prefixServiceType, (xmlChar*)response->hrefServiceType); - for (iter = request->Modification; iter != NULL; iter = g_list_next(iter)) { + for (iter = request->Modification; iter != NULL; iter = g_list_next(iter)) { LassoDstModification *modification = iter->data; xmlNode *newNode = modification->NewData->any->data; xpathObj = xmlXPathEvalExpression((xmlChar*)modification->Select, @@ -714,11 +722,19 @@ lasso_data_service_build_modify_response_msg(LassoDataService *service) if (node != NULL) { xmlReplaceNode(node, newNode); } + } else { + res = LASSO_DST_ERROR_MODIFY_FAILED; } xmlXPathFreeObject(xpathObj); xpathObj = NULL; } + if (res == 0) { + /* Save new service resource data */ + xmlFreeNode(service->resource_data); + service->resource_data = xmlCopyNode(cur_data, 1); + } + xmlXPathFreeContext(xpathCtx); xmlFreeDoc(doc); |