Support #1333

Find a correct way to parse XML method requests from VOCLient in VOHUB (branch 1229-GVOHub)

Added by Louge Thierry over 9 years ago. Updated over 9 years ago.

Status:ClosedStart date:10/13/2014
Priority:NormalDue date:
Assigned To:Louge Thierry% Done:

100%

Category:-
Target version:-
Duration:

Description

GVOHub is available for clients to register, but still not fully functionnal as the parsing of method calls from clients still is under progress.
Testing:
import gammalib as gam
hub = gam.GVOHub()
hub.start()

import gammalib as gam
client = gam.GVOClient()
client.connect()


Recurrence

No recurrence.

History

#1 Updated by Knödlseder Jürgen over 9 years ago

  • Tracker changed from Bug to Support

Can you post a code fragment to illustrate what you want to do? I can then make a proposal ...

#2 Updated by Louge Thierry over 9 years ago

The content, received by the Hub from the client is:
<param><value><struct>
<member>
<name>samp.name</name>
<value><string>GammaLib</string></value>
</member>
<member>
<name>samp.description.text</name>
<value><string>GammaLib client</string></value>
</member>
<member>
<name>samp.icon.url</name>
<value><string>http://a.fsdn.com/allura/p/gammalib/icon&lt;/string&gt;&lt;/value>
</member>
<member>
<name>author.affiliation</name>
<value><string>IRAP, Toulouse, France</string></value>
</member>
<member>
<name>author.email</name>
<value><string></string></value>
</member>
<member>
<name>author.name</name>
<value><string>Juergen Knoedlseder</string></value>
</member>
</struct></value></param>
</params>
</methodCall>

The error raised while parsing the document is:
terminate called after throwing an instance of 'GException::xml_name_not_found’
what(): ** ERROR in GXmlNode GXmlNode::element(std::string&, int&): XML element name “name” not found.

While the code used to parse the message is the following:

const GXmlNode* node = xml.element(“methodCall”, 0);
if (node != NULL) {
node = node→element(“params”, 0);
if (node != NULL) {
node = node→element(“param”, 1);
if (node != NULL) {
node = node→element(“value”, 0);
if (node != NULL) {
node = node→element(“struct”, 0);
if (node != NULL) {
int num = node→elements(“member”);
for (int i = 0; i < num; ++i) {
const GXmlNode* member = node→element(“member”, i);
const GXmlNode* member_name = member→element(“name”, 0);
std::string one_name;
std::string one_value;
get_name_value_pair(member_name, one_name, one_value);
if (one_name == name) {
value = one_value;
break;
}
}
}
}
}
}
}

#3 Updated by Knödlseder Jürgen over 9 years ago

  • Status changed from New to In Progress

I think this action can be closed as we identified a bug in the code, right?

#4 Updated by Knödlseder Jürgen over 9 years ago

  • Status changed from In Progress to Closed
  • % Done changed from 0 to 100

Also available in: Atom PDF