![]() |
Webservice-Client: Parameter werden nicht übergeben
Hallo zusammen!
Ich arbeite gerade an einem Java-Webservice mit Delphi-Client. Serverseitig bietet der WS eine Function an, die zwei Strings als Parameter entgegennimmt und ein komplexes Objekt zurückgibt. Als ich die Function über Delphi ohne relevante Parameter testete stellte ich fest, dass es keine Probleme mit dem Rückgabetyp gab, was ich am ehesten erwartete. Delphi rockt! Nun, wo ich mit dem Delphi-clientseitigen Aufruf aber die beiden Strings übergeben möchte, kommen diese aber nicht an, sondern nur 2x'null'. Ich bin nun einigermaßen ratlos. Habt Ihr vielleicht Ideen? Mein Webservice läuft auf Tomcat 6.0.20 / J2EE 5. Die angesprochene Function ist wie folgt definiert:
Delphi-Quellcode:
Der Delphi Aufruf erfolgt ganz einfach über
/**
* Web service operation */ @WebMethod(operationName = "doLogin") public LoginRecord doLogin(@WebParam(name = "login")String login, @WebParam(name = "pwdHash") String pwdHash)
Delphi-Quellcode:
Mein Verdacht ist, dass ich mit den übergebenen Strings vielleicht noch irgendwas anstellen muss. Für Ratschläge wäre ich sehr dankbar :)
s.doLogin('name','passswordhash');
|
Re: Webservice-Client: Parameter werden nicht übergeben
Zitat:
Die XML Dinger lassen sich sehr schön mitlesen. Da Du Delphi 2009 verwendest, sind die von Dir definierten Strings Unicode, verwende WideStrings oder AsiStrings. lg. Astat |
Re: Webservice-Client: Parameter werden nicht übergeben
Zitat:
Ich habe einen Service mit NetBeans 6.8 geschrieben und den Client in Delphi 2009, und kann das Problem auch schon für den einfachsten Fall (kein komplexes Objekt als Rückgabe) nachvollziehen. Der SoapTester in NetBeans zeigt diesen korrekt funktionierenden SOAP Request:
Delphi-Quellcode:
Delphi sendet etwas anderes:
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Header/> <S:Body> <ns2:login xmlns:ns2="http://betabeans.de/"> <login>a</login> <pwd>b</pwd> </ns2:login> </S:Body> </S:Envelope>
Delphi-Quellcode:
Nach Korrektur (siehe unten) funktioniert es in Delphi:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <login xmlns="http://betabeans.de/"> <login>a</login> <pwd>b</pwd> </login> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Delphi-Quellcode:
Ich musste dazu nur
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <NS1:login xmlns:NS1="http://betabeans.de/"> <login xsi:type="xsd:string">a</login> <pwd xsi:type="xsd:string">b</pwd> </NS1:login> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Delphi-Quellcode:
ändern in
InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDocument);
Delphi-Quellcode:
InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDefault);
Cheers, |
Re: Webservice-Client: Parameter werden nicht übergeben
Zitat:
Das problem habe ich auch öfters, daß bei der Übergabe von Strings das xsd mit dazu geschrieben wird. Bisher habe ich mir immer damit geholfen, daß ich die XML-Übermittlung im onbeforeexecute selber geändert habe, muß ich dann gleichmal probieren :-) Gruß Frank |
Re: Webservice-Client: Parameter werden nicht übergeben
Zitat:
In der WSDL steht ja
Delphi-Quellcode:
Dass Delphi daraus folgert
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
Delphi-Quellcode:
nehmen zu müssen klingt vernünftig. Warum es damit dann aber nicht funktioniert sondern nur mit ioDefault, ist schon seltsam.
InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDocument);
Ich freue mich auf den ersten Februar, dann gibt es den "Sun Certified Developer for Java Web Services" Study Guide. Dass Delphi sich mit SOAP so schwer tut (sobald andere Plattformen angesprochen werden müssen), ist schade. Vermutlich gibt es zu wenig Entwickler, die damit in größerem Rahmen cross-platform arbeiten wollen. Oder sie setzen andere SOAP Libraries ein, die besser sind als die in Delphi enthaltene? Viele Grüße, |
Re: Webservice-Client: Parameter werden nicht übergeben
Danke für Eure Tipps. Der Hinweis von mjustin hat Abhilfe geschaffen(btw: schön, mal einen Netbeans-Benutzer zu treffen :cheers: ).
(Zwischenzeitlich beantwortet: Allerdings würde mich ebenfalls interessieren, warum das so funktioniert.) Was gibts denn an alternativen SOAP-Implementierungen für Delphi, auf denen man aufsetzen könnte? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz