Einzelnen Beitrag anzeigen

ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#1

SOAP Client und verschachtelte Namespaces

  Alt 5. Mär 2012, 23:21
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
  Mit Zitat antworten Zitat