SOAP-Problem mit soaplib (Server) und suds (Client)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
pedesen
User
Beiträge: 7
Registriert: Sonntag 15. Februar 2009, 13:28

Hi,

ich habe ein kleines Problem mit der Antwort meines soaplib-Servers. Ich habe auf dem Server zwei Funktionen addStudent und listStudents:

Code: Alles auswählen

class Student(ClassSerializer):
    class types:
        name = String
        matrikelNummer = String

class AnmeldeServer(SimpleWSGISoapApp):

    @soapmethod(Student,_returns=Integer)
        def addStudent(self, student):
        studentDict[student.name] = student
        return 1

    @soapmethod(_returns=Array(Student))
    def listStudents(self):
        students = studentDict().values()
        return students
mein suds-Client sieht (vereinfacht) so aus:

Code: Alles auswählen

client = Client(url, cache=None)
print client.service.listStudents()
Bei der Ausgabe stoße ich dann auf etwas unerwartetes, nämlich:

Code: Alles auswählen

(StudentArray){
   _type = "tns:StudentArray"
   Student[] = 
      (Student){
         name = "blubmann"
         matrikelNummer = "1234"
      },
 }
ich erwarte eigentlich so etwas, damit ich über das Rückgabe-Objekt iterieren kann:

Code: Alles auswählen

(ArrayOfns__Student){
   item[] = 
      (Student){
         name = "blubmann"
         matrikelNummer = "1234"
      },
Ein wenig Background: ich habe zwei Aufgaben bekommen:
1.) einen Soap-Client zu schreiben, der auf einen vorhandenen Soap-Server zugreift.
2.) den vorhandenen Soap-Server nachzubauen. Dabei hab ich mich für Python und soaplib entschieden.

Den Client habe ich also schon mithilfe von suds geschrieben. Er kommuniziert auch einwandfrei mit dem (schon vorhandenen) Server. Allerdings kommuniziert er nicht korrekt mit meinem selbstgeschriebenen Server, da die Antwort, die vom Server kommt, von suds offensichtlich anders interpretiert wird (siehe oben). Wie kann ich also meinen Server dazu bewegen, dass er das gleiche liefert, wie der vorhandene Server?

Ich hoffe, ich habe mein Problem nicht zu konfus beschrieben und hoffe, ihr könnt mir helfen...
Antworten