summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2007-06-07 00:20:07 +0000
committerFrederic Peters <fpeters@entrouvert.com>2007-06-07 00:20:07 +0000
commit4b5d13297286ec722c304ff41579bf8a819d3fff (patch)
tree9588cc3479180bfb77da926b16106262a17cde46
parentce561aa93748beebdc94c34e86deeefdbcd416cf (diff)
extended xml_insure_namespace so it creates the namespace itself, after having
looked for a preexisting namespace; the function was previously called with ns == NULL, which caused namespace to be *removed* from elements (ns was NULL because xmlNewNs will return NULL when the namespace is already defined).
-rw-r--r--lasso/xml/id-wsf-2.0/dstref_query.c7
-rw-r--r--lasso/xml/id-wsf-2.0/dstref_query_response.c7
-rw-r--r--lasso/xml/private.h3
-rw-r--r--lasso/xml/xml.c15
4 files changed, 22 insertions, 10 deletions
diff --git a/lasso/xml/id-wsf-2.0/dstref_query.c b/lasso/xml/id-wsf-2.0/dstref_query.c
index 3746e36c..5f6e2d22 100644
--- a/lasso/xml/id-wsf-2.0/dstref_query.c
+++ b/lasso/xml/id-wsf-2.0/dstref_query.c
@@ -60,12 +60,11 @@ static xmlNode*
get_xmlNode(LassoNode *node, gboolean lasso_dump)
{
xmlNode *xmlnode;
- xmlNs *ns;
xmlnode = parent_class->get_xmlNode(node, lasso_dump);
- ns = xmlNewNs(xmlnode, (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY(node)->hrefServiceType,
- (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY(node)->prefixServiceType);
- xml_insure_namespace(xmlnode, ns, TRUE);
+ xml_insure_namespace(xmlnode, NULL, TRUE,
+ LASSO_IDWSF2_DSTREF_QUERY(node)->hrefServiceType,
+ LASSO_IDWSF2_DSTREF_QUERY(node)->prefixServiceType);
return xmlnode;
}
diff --git a/lasso/xml/id-wsf-2.0/dstref_query_response.c b/lasso/xml/id-wsf-2.0/dstref_query_response.c
index f497b7fb..82fb3b25 100644
--- a/lasso/xml/id-wsf-2.0/dstref_query_response.c
+++ b/lasso/xml/id-wsf-2.0/dstref_query_response.c
@@ -60,11 +60,12 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump)
{
xmlNode *xmlnode;
xmlNs *ns;
+ char *ns_href;
xmlnode = parent_class->get_xmlNode(node, lasso_dump);
- ns = xmlNewNs(xmlnode, (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->hrefServiceType,
- (xmlChar*)LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->prefixServiceType);
- xml_insure_namespace(xmlnode, ns, TRUE);
+ xml_insure_namespace(xmlnode, NULL, TRUE,
+ LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->hrefServiceType,
+ LASSO_IDWSF2_DSTREF_QUERY_RESPONSE(node)->prefixServiceType);
return xmlnode;
}
diff --git a/lasso/xml/private.h b/lasso/xml/private.h
index 2a239722..bb266131 100644
--- a/lasso/xml/private.h
+++ b/lasso/xml/private.h
@@ -119,7 +119,8 @@ int lasso_sign_node(xmlNode *xmlnode, const char *id_attr_name, const char *id_v
void xmlCleanNs(xmlNode *root_node);
-void xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force);
+void xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force,
+ char *ns_href, char *ns_prefix);
gchar* lasso_node_build_deflated_query(LassoNode *node);
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c
index dde38a39..2fdc451e 100644
--- a/lasso/xml/xml.c
+++ b/lasso/xml/xml.c
@@ -2337,14 +2337,25 @@ xmlCleanNs(xmlNode *root_node)
}
void
-xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force)
+xml_insure_namespace(xmlNode *xmlnode, xmlNs *ns, gboolean force, char *ns_href, char *ns_prefix)
{
xmlNode *t = xmlnode->children;
+ if (ns == NULL) {
+ for (ns = xmlnode->nsDef; ns; ns = ns->next) {
+ if (strcmp(ns->href, ns_href) == 0) {
+ break;
+ }
+ }
+ if (ns == NULL) {
+ ns = xmlNewNs(xmlnode, ns_href, ns_prefix);
+ }
+ }
+
xmlSetNs(xmlnode, ns);
while (t) {
if (t->type == XML_ELEMENT_NODE && (force == TRUE || t->ns == NULL)) {
- xml_insure_namespace(t, ns, force);
+ xml_insure_namespace(t, ns, force, NULL, NULL);
}
t = t->next;
}