gSoap: probleme beim Serialisieren des Servers

grandmetre

Mitglied
Hallo zusammen,

ich versuche im Moment einfache clients und server in C mit gSoap zu schreiben, um mich in das Thema einzuarbeiten. Ich habe leider im Moment das Problem, dass ich nach gegebenen Beispielen benutzen Code zwar kompilieren kann, die Serialisierung des Servers aber nicht so recht funktionieren will.
Mein Code sieht folgendermaßen aus:

Header-Datei:
Code:
#ifndef GETINFO_H_
#define GETINFO_H_


#endif /* GETINFO_H_ */

typedef char* xsd__string;


int ns__getInfo(xsd__string name, struct ns1__info{xsd__string name;} *result);

und Server-Code:
Code:
#include "soapH.h"
#include "ns.nsmap"

int main()
{
	soap_serve(soap_new());
	return 0;
}

int ns__getInfo(struct soap *soap, char *name, struct ns1__info *result){

	struct ns1__info ret;
	ret.name = name;
	fprintf(stderr, "returning name %s\n", ret.name);
	result= &ret;

	return SOAP_OK;
}

Ich habe versucht mit der mitgelieferten request-Datei den Server zu testen. Diese sieht folgendermaßen aus:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:ns="http://tempuri.org/ns.xsd"
 xmlns:ns1="http://tempuri.org/ns1.xsd">
 <SOAP-ENV:Body>
  <ns:getInfo>
   <name>servTest</name>
  </ns:getInfo>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

leider bekomme ich diese Antwort,

Code:
./infoServer < ns.getInfo.req.xml 
returning name servTest
Status: 200 OK
Server: gSOAP/2.8
Content-Type: text/xml; charset=utf-8
Content-Length: 425
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://tempuri.org/ns.xsd" xmlns:ns1="http://tempuri.org/ns1.xsd"><SOAP-ENV:Body><ns1:info></ns1:info></SOAP-ENV:Body></SOAP-ENV:Envelope>

bei der zu erkenn ist, dass zwischen den Tags
Code:
<ns1:info></ns1:info>
weder Daten noch der Tag für den Namen zu finden sind.

Kann mir jemand helfen?

Danke schonmal im Vorraus
grand
 
Hi.

Den Wert eines Parameters innerhalb einer Funktion zu ändern hat keine Wirkung.

Zu versuchen die Adresse einer lokalen (automatischen) Variablen zurückzugeben ist zudem noch gefährlich und hätte wahrscheinlich zu einem Absturz geführt.
C:
int ns__getInfo(struct soap *soap, char *name, struct ns1__info *result){
    result->name = soap_malloc(soap, strlen(name) + 1));
    strcpy(result->name, name);
    fprintf(stderr, "returning name %s\n", result->name);
 
    return SOAP_OK;
}
Gruß
 
Danke für die schnelle Antwort.
Die gegebenen Zeilen habe ich leider nicht kompilieren können. Das ist aber nicht all zu tragisch, da es mir darum geht generell das Prinzip der Rückgabe durch ein Struct zu verstehen. Ich bin auf jeden Fall ein gutes Stück weiter gekommen.

Gruß
grand
 
Zurück