AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Webservice-Client: Parameter werden nicht übergeben
Thema durchsuchen
Ansicht
Themen-Optionen

Webservice-Client: Parameter werden nicht übergeben

Ein Thema von TheJeed · begonnen am 10. Jan 2010 · letzter Beitrag vom 10. Jan 2010
Antwort Antwort
Benutzerbild von TheJeed
TheJeed

Registriert seit: 11. Jun 2009
Ort: Leipzig
57 Beiträge
 
#1

Webservice-Client: Parameter werden nicht übergeben

  Alt 10. Jan 2010, 03:24
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:
   /**
     * Web service operation
     */
    @WebMethod(operationName = "doLogin")
    public LoginRecord doLogin(@WebParam(name = "login")String login, @WebParam(name = "pwdHash") String pwdHash)
Der Delphi Aufruf erfolgt ganz einfach über
s.doLogin('name','passswordhash'); Mein Verdacht ist, dass ich mit den übergebenen Strings vielleicht noch irgendwas anstellen muss. Für Ratschläge wäre ich sehr dankbar
Teitmaschine Go!
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#2

Re: Webservice-Client: Parameter werden nicht übergeben

  Alt 10. Jan 2010, 04:20
Zitat von TheJeed:
Mein Verdacht ist, dass ich mit den übergebenen Strings vielleicht noch irgendwas anstellen muss. Für Ratschläge wäre ich sehr dankbar
Hallo TheJeed, schau dir mal an was übers Netzwerk transportiert wird (Paketizer), oder verwende einen Proxy (PuTTY).
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
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Webservice-Client: Parameter werden nicht übergeben

  Alt 10. Jan 2010, 11:14
Zitat von TheJeed:
Nun, wo ich mit dem Delphi-clientseitigen Aufruf aber die beiden Strings übergeben möchte, kommen diese aber nicht an, sondern nur 2x'null'.
Ja, Delphi läßt einen im SOAP Bereich oft im Dunkeln

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:
<?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 sendet etwas anderes:
Delphi-Quellcode:
<?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>
Nach Korrektur (siehe unten) funktioniert es in Delphi:
Delphi-Quellcode:
<?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>
Ich musste dazu nur

InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDocument); ändern in

InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDefault);
Cheers,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Webservice-Client: Parameter werden nicht übergeben

  Alt 10. Jan 2010, 11:18
Zitat:
InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebS ervice), ioDefault);
kannst Du erklären, warum es dann damit geht ?
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

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Webservice-Client: Parameter werden nicht übergeben

  Alt 10. Jan 2010, 11:38
Zitat von Keldorn:
Zitat:
InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebS ervice), ioDefault);
kannst Du erklären, warum es dann damit geht ?
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
Trial and error

In der WSDL steht ja

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> Dass Delphi daraus folgert

InvRegistry.RegisterInvokeOptions(TypeInfo(NewWebService), ioDocument); nehmen zu müssen klingt vernünftig. Warum es damit dann aber nicht funktioniert sondern nur mit ioDefault, ist schon seltsam.

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,
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von TheJeed
TheJeed

Registriert seit: 11. Jun 2009
Ort: Leipzig
57 Beiträge
 
#6

Re: Webservice-Client: Parameter werden nicht übergeben

  Alt 10. Jan 2010, 11:48
Danke für Eure Tipps. Der Hinweis von mjustin hat Abhilfe geschaffen(btw: schön, mal einen Netbeans-Benutzer zu treffen ).

(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?
Teitmaschine Go!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz