Hallo zusammen,
ich schlage mich gerade mit einem Webservice herum, der als Antwort eine Liste mit Daten zurückgeben soll.
Neben der Liste soll alternativ auch noch eine Bestätigung bzw. eine Fehlerbeschreibung zuurückgegeben werden. Die Implementierung habe ich mit NuSOAP vorgenommen, aber evntl. ist das "Problem" auch einfacher und ich stehe einfach nur auf dem Schlauch.
Der Server inkl. Beschreibung der Complex-Types für Ein- und Ausgabe
Die Methode (Demowerte)
Der Client inkl. der kompletten Antwort und des Ausgebens des Arrays
Die Ausgaben des Clients:
Wie man sehen kann, funktioniert der Service insofern, dass die Objekte zurückgegeben werden. Die Rückgabe "listPurchases" sollte jetzt die Array-Werte beinhalten. Aktuell habe ich diese Variable im ComplexType ja aber als xsd:string deklariert, daher vermute ich, dass dort sowas wie "xsd:array" o.ä. stehen müsste. Also entweder ist die Deklaration falsch oder ich mache einen anderen Fehler beim Auslesen. Übertragen wird ja ganz klar ein Array?!
Alternativ kann ich mir aber auch gut vorstellen, die Daten vor der Rückgabe in ein XML-Format zu pressen und dann als String zurückzugeben. Ein erster Versuch schlug allerdings fehl, da sämtliche Spitzen-Klammern des XMLs geparst wurden. Wie ist es üblich ein XML per SOAP zu versenden? Codiere ich das XML in base64 oder packe es in irgendeine eine Hülle?
Wäre toll, wenn mir jemand einen Tipp dazu geben könnte - Vielen Dank!
ich schlage mich gerade mit einem Webservice herum, der als Antwort eine Liste mit Daten zurückgeben soll.
Neben der Liste soll alternativ auch noch eine Bestätigung bzw. eine Fehlerbeschreibung zuurückgegeben werden. Die Implementierung habe ich mit NuSOAP vorgenommen, aber evntl. ist das "Problem" auch einfacher und ich stehe einfach nur auf dem Schlauch.
Der Server inkl. Beschreibung der Complex-Types für Ein- und Ausgabe
PHP-Code:
$server->wsdl->addComplexType('wsListPurchasesInputCT','complexType','struct','all','',
array(
'loginEmail' => array('name' => 'loginEmail','type' => 'xsd:string'),
'loginSessionID' => array('name' => 'loginSessionID','type' => 'xsd:int')
));
$server->wsdl->addComplexType('wsListPurchasesReturnCT','complexType','struct','all','',
array(
'listPurchasesError' => array('name' => 'listPurchasesError','type' => 'xsd:string'),
'listPurchases' => array('name' => 'listPurchases','type' => 'xsd:string'),
'listPurchasesConfirm' => array('name' => 'listPurchasesConfirm','type' => 'xsd:boolean')
));
$server->register(
'wsListPurchases',
array('listPurchasesInputArray'=>'tns:wsListPurchasesInputCT'), //Eingabeparameter (s.o.)
array('return'=>'tns:wsListPurchasesReturnCT'), //Rückgabe (s.o.)
$namespace, false, 'rpc', 'literal',
'#8'); // Beschreibung
PHP-Code:
function wsListPurchases($listPurchasesInputArray){
$listPurchasesError = "Fehlermeldung";
$listPurchasesConfirm = true;
$listPurchases = array(
'wert1' => "text 1",
'wert2' => "text 2",
'wert3' => "text 3",
'wert4' => "text 4",
'wert5' => "text 5",
'wert6' => "text 6",
'wert7' => "text 7");
return $returnArray = array('listPurchasesError' => $listPurchasesError, 'listPurchases' => $listPurchases, 'listPurchasesConfirm' => $listPurchasesConfirm);
}
PHP-Code:
$inputArray_08 = array('loginEmail' => "max@mustermann.de", 'loginSessionID' => "12345");
$response_08 = $SOAPClient->wsListPurchases($inputArray_08);
var_dump($response_08);
$listPurchaseArray = $response_08->listPurchases;
var_dump($response_08->listPurchases);
object(stdClass)#3 (3) {
["listPurchasesError"]=>
string(13) "Fehlermeldung"
["listPurchases"]=>
string(5) "Array"
["listPurchasesConfirm"]=>
bool(true)
}
string(5) "Array"
["listPurchasesError"]=>
string(13) "Fehlermeldung"
["listPurchases"]=>
string(5) "Array"
["listPurchasesConfirm"]=>
bool(true)
}
string(5) "Array"
Alternativ kann ich mir aber auch gut vorstellen, die Daten vor der Rückgabe in ein XML-Format zu pressen und dann als String zurückzugeben. Ein erster Versuch schlug allerdings fehl, da sämtliche Spitzen-Klammern des XMLs geparst wurden. Wie ist es üblich ein XML per SOAP zu versenden? Codiere ich das XML in base64 oder packe es in irgendeine eine Hülle?
Wäre toll, wenn mir jemand einen Tipp dazu geben könnte - Vielen Dank!

Kommentar