Hallo zusammen,
ich beschäftige mich gerade mit einem
SOAP Client. Ich habe von dem Webservice Anbieter eine
WSDL-Datei bekommen, die ich mit dem
WSDL-Importer importiert habe. Es will mir aber nicht gelingen vernünftig mit dem Server zu kommunizieren, da der Namespace beim erzeugen der Klassen richtig gesetzt wird.
Ich habe es sowohl mit Delphi 2007 als auch mit XE2 probiert, wobei letzters schon besser funktioniert...
Hier mal ein Ausschnitt, wie die
SOAP-Message aussehen soll:
Delphi-Quellcode:
<soapenv:Header>
<cis:Authentification>
<cis:user>maxmuster</cis:user>
<cis:signature>MusterPr00fi1971</cis:signature>
<cis:type>0</cis:type>
</cis:Authentification>
<de:DeveloperAuthentification>
<DEVID>musterdev</DEVID>
<APPID>musterapp</APPID>
<CERTID>mustercert</CERTID>
</de:DeveloperAuthentification>
</soapenv:Header>
<soapenv:Body>
<de:CreateRequest>
<cis:Version>
<cis:majorRelease>1</cis:majorRelease>
<cis:minorRelease>0</cis:minorRelease>
</cis:Version>
Wenn ich das nun mit der importierten
WSDL-Datei erstelle kommt bei Delphi XE2 folgendes raus:
Delphi-Quellcode:
<
SOAP-ENV:Header>
<NS1:AuthentificationType xmlns:NS1="http:
//xxx.de/webservice/cisbase">
<user xmlns="http:
//xxx.de/webservice/cisbase">maxmuster</user>
<signature xmlns="http:
//xxx.de/webservice/cisbase">MusterPr00fi1971</signature>
<
type xmlns="http:
//xxx.de/webservice/cisbase">0</type>
</NS1:AuthentificationType>
<NS2:DeveloperAuthentification xmlns:NS2="http:
//de.ws.xxxx">
<DEVID>musterdev</DEVID>
<APPID>musterapp</APPID>
<CERTID>mustercert</CERTID>
</NS2:DeveloperAuthentification>
</
SOAP-ENV:Header>
<
SOAP-ENV:Body>
<CreateRequest xmlns="http:
//de.ws.xxxx">
<Version xmlns="http:
//xxx.de/webservice/cisbase">
<majorRelease>1</majorRelease>
<minorRelease>0</minorRelease>
</Version>
Hier ist definitiv das xmlns="" zuviel und die Erweiterung cis: und de: zuwenig. Der
SOAP-Server nimmt mit der Delphi-Variante die Daten nicht an, die anderen schon...
Hat hier schoneimal jemand sowas umgesetzt und kann mir sagen was ich falsch mache? Ich könnte zwar in dem HTTPRIO1.BeforeExecute alles mit StringReplace ersetzen, aber das kann ja nicht Sinn der Sache sein, oder?
Für Eure Hilfe bedanke ich mich im voraus.
VG
Andreas