Seite 1 von 1

QtSoap - Werte aus der SoapMessage filtern

Verfasst: 28. August 2007 12:24
von Baz
Hallo,

ich bin gerade dabei mit QtSoap zu arbeiten und stoße dabei auf das Problem, dass ich nicht in der Lage bin auf die in einer Soap Message angelegten Types zuzugreifen.
Im Moment bastel ich mir auf der Serverseite eine Soapmessage zusammen

Code: Alles auswählen

QtSoapSimpleType *type1 = new QtSoapSimpleType(QtSoapQName("key"), 20);
QtSoapSimpleType *type2 = new QtSoapSimpleType(QtSoapQName("value"), 40);
	
QtSoapMessage response;
response.setMethod(QtSoapQName("Response"));
response.addMethodArgument(type1);
response.addMethodArgument(type2);
und schick mir das dann zu meinem Client. Um die Nachricht auszuwerten gehe ich analog zu dem Beispiel von Trolltec vor.

Code: Alles auswählen

soapMessage.setContent(data);
const QtSoapType &res = soapMessage.returnValue();
Jetzt sollte es möglich sein mittels res["Argumentname"] auf die einzelnen Werte zuzugreifen... klappt aber irgendwie nicht. Mit res.toString() bekomme ich den ersten Wert '20' zurückgegeben. res.Valid() gibt brav true zurück... Das doofe an dem Bsp von Trolltec ist, dass Google den SOAP Support eingestellt hat, daran kann ich es nämlich leider nicht mehr nachvollziehen.

Hier noch die produzierte SOAP Message

Code: Alles auswählen

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" >
<SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<Response>
<key xsi:type="xsd:int" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" >20</key>
<value xsi:type="xsd:int" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" >40</value>
</Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verfasst: 29. August 2007 14:30
von macman
Ich wühle mich auch gerade da durch und stehe an vielen Stellen noch auf dem Schlauch. Vielleicht hilft dir das Population-Example, das funktioniert noch und bekommt mehrere Werte zurück. Wenn Du dir dann die Message als Xml-String anzeigen lässt, fällt vielleicht der Groschen, äh Cent :-)

Verfasst: 29. August 2007 22:02
von Baz
es gibt ein Population example? ^^ - kannst du mir dazu mal den Link geben? Da bin ich mal gespannt... :)

Verfasst: 30. August 2007 07:35
von macman
http://trolltech.com/products/qt/addon/ ... es/qtsoap/ :-)
Auf der Seite ist nur das Google-Example, im Archiv sind zwei weitere.

Verfasst: 30. August 2007 09:15
von Baz
Lalala... ^^ - hab ich scheinbar verdrängt. Werd ich mir mal anschauen :)

Verfasst: 30. August 2007 15:03
von Baz
Hab mir jetzt mal ne Soapmsg rausgefiltert aus dem Populationbsp:

Code: Alles auswählen

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" >
<SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<getPopulationResponse xmlns="http://www.abundanttech.com/WebServices/Population">
<getPopulationResult xmlns="http://www.abundanttech.com/WebServices/Population">
<Country xmlns="http://www.abundanttech.com/WebServices/Population" xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" >Germany</Country>
<Date xmlns="http://www.abundanttech.com/WebServices/Population" xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" >2007</Date>
<Pop xmlns="http://www.abundanttech.com/WebServices/Population" xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" >82,400,996</Pop>
</getPopulationResult>
</getPopulationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ehrlich gesagt verstehe ich nicht ganz warum um alles in der Welt er meine Sachen nicht versteht - abgesehen davon, dass meine Werte keine URL mitbringen und nicht 2x geschachtelt ist(Response, Result), sind sie doch gleich...