Make EndPointReference constructor more robust
diff --git a/bindings/openwsman.i b/bindings/openwsman.i
index 03a6e8d..783b260 100644
--- a/bindings/openwsman.i
+++ b/bindings/openwsman.i
@@ -272,6 +272,17 @@
}
+static epr_t *my_epr_deserialize(WsXmlNodeH node);
+static epr_t *my_epr_deserialize(WsXmlNodeH node) {
+ fprintf(stderr, "my_epr_deserialize(%s)\n", ws_xml_get_node_local_name(node));
+ if (strcmp(WSA_EPR, ws_xml_get_node_local_name(node)) == 0) {
+ /* Use node as-is if its already a WSA_EPR */
+ return epr_deserialize(node, NULL, NULL, 1);
+ }
+ /* else search the WSA_EPR node */
+ return epr_deserialize(node, XML_NS_ADDRESSING, WSA_EPR, 1);
+}
+
static char *epr_prefix(const char *uri);
/* Get prefix from a EPR uri */
diff --git a/bindings/ruby/tests/epr.rb b/bindings/ruby/tests/epr.rb
index 706bc1c..7270c34 100644
--- a/bindings/ruby/tests/epr.rb
+++ b/bindings/ruby/tests/epr.rb
@@ -58,6 +58,8 @@
def test_epr_compare
epr1 = Openwsman::EndPointReference.new "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Windows&Vendor=Microsoft"
+ assert epr1
+puts "EPR1 #{epr1}"
# check namespace
assert_equal "root/cimv2", epr1.namespace
@@ -87,8 +89,11 @@
# convert epr1 to xml-string and parse this string
doc = Openwsman::create_doc_from_string epr1.to_xml
# generate epr2 from parsed xml
+ puts "DOC #{doc.to_xml}"
epr2 = Openwsman::EndPointReference.new doc
-
+ assert epr2
+puts "EPR2 #{epr2}"
+
# must be true
assert epr1.cmp(epr2)
end
diff --git a/bindings/wsman-epr.i b/bindings/wsman-epr.i
index e879ce5..09ddb69 100644
--- a/bindings/wsman-epr.i
+++ b/bindings/wsman-epr.i
@@ -43,7 +43,7 @@
else if (CLASS_OF(uri) == SwigClassXmlNode.klass) {
WsXmlNodeH node;
SWIG_ConvertPtr(uri, (void **)&node, SWIGTYPE_p___WsXmlNode, 0);
- return epr_deserialize(node, XML_NS_ADDRESSING, WSA_EPR, 1);
+ return my_epr_deserialize(node);
}
else if (CLASS_OF(uri) == SwigClassXmlDoc.klass) {
WsXmlDocH doc;
@@ -52,7 +52,7 @@
node = ws_xml_get_soap_body(doc);
if (node == NULL)
node = ws_xml_get_doc_root(doc);
- return epr_deserialize(node, NULL, NULL, 1);
+ return my_epr_deserialize(node);
}
else {
return epr_from_string(as_string(uri));
@@ -102,6 +102,7 @@
"$result = ($1 == 0) ? Qtrue : Qfalse;";
#endif
int cmp(epr_t *epr2) {
+ fprintf(stderr, "%p.cmp(%p)\n", $self, epr2);
return epr_cmp($self, epr2);
}