AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition
Thema durchsuchen
Ansicht
Themen-Optionen

SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition

Ein Thema von danielA · begonnen am 8. Jul 2016 · letzter Beitrag vom 13. Jul 2016
Antwort Antwort
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#1

SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition

  Alt 8. Jul 2016, 16:19
Hallo Liebe Delphigemeinde,

ich habe eine wsdl- Datei erhalten, für welche ein Client implementiert werden soll.
Ich habe derzeit keinen Zugriff auf den Server, welcher das dann tatsächlich ausführen soll, deshalb kann ich nicht "real" testen, sondern nur mit meinem eigens implementierten Server.

Die Implementierung der Schnittstelle ist soweit auch abgeschlossen, ich habe jedoch ein Problem mit einem Datentyp.

Delphi-Quellcode:
  IMEINInterface = interface(IInvokable)
  ['{C02AF8D7-960D-49A0-BCDE-BCB2EF73E8AC}']
    function MeineMethode(const Abfrage: TAbfrage): TAntwort; stdcall;
  end;
Soweit alles in Ordnung.
Jetzt habe ich aber das Problem, dass in den Klassen TAbfrage und TAntwort jeweils ein property vom Typ TWerte enthalten ist. Die Propertys von TWerte unterscheiden sich aber gänzlich. Mir ist klar, dass ich bei der Registrierung der WSDL-Typen Umbenennungen vornehmen kann. Dennoch müßte dann ja z.B. sowas gemacht werden.

Delphi-Quellcode:

initialization

  ...
  RemClassRegistry.RegisterXSClass(TWerteAbfrage, 'urn:IMEINInterfaceServiceIntf', 'TWerteAbfrage', 'TWerte');
  RemClassRegistry.RegisterXSClass(TWerteAntwort, 'urn:IMEINInterfaceServiceIntf', 'TWerteAntwort', 'TWerte');
  ...
end.
So kann ich zwar innerhalb Delphi's die Definitionen trennen aber schafft RegisterXSClass tatsächlich die Verlinkung auf das Richtige Unterelment?

Vielen Dank und Gruß,

Daniel
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.008 Beiträge
 
Delphi 2009 Professional
 
#2

AW: SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition

  Alt 8. Jul 2016, 19:20
Hat der aus der WSDL generierte Delphi-Code denn auch zwei verschiedene Implementierungen von TWerte, die zur WSDL passen?

Falls ja, würde ich den eigens implementierten Server auch mit den Aufrufen testen, die beide Varianten verwenden und den Aufruf client- und serverseitig debuggen, zum Beispiel mit Fiddler2 als HTTP Proxy.
Michael Justin
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition

  Alt 11. Jul 2016, 15:28
Hallo Michael,

erstmal vielen Dank für Deine Antwort.

Ja, durch den Import wurden mir 2 Klassen importiert und registriert. Die Eine hieß TWerte und die andere TWerte2. die Registrierung im Initializationteil sah wie bereit unten angegeben aus.

Code:
initialization
  ...
  RemClassRegistry.RegisterXSClass(TWerteAbfrage, 'urn:IMEINInterfaceServiceIntf', 'TWerteAbfrage', 'TWerte');
  RemClassRegistry.RegisterXSClass(TWerteAntwort, 'urn:IMEINInterfaceServiceIntf', 'TWerteAntwort', 'TWerte');
  ...
end.
Ich habe lediglich die Klassen nach meinem Gusto umbenannt.
Im Testserver hätte ich das gerne genauso gemacht. RegisterXSClass scheint dort aber nicht zu greifen oder gibt es da einen anderen Befehl für? Lass ich mir den XML-Code anzeigen, so stehen da nämlich die tatsächlichen Klassennamen des Servers drin. Also TWerteAbfrage und TWerteAntwort anstelle von TWerte. Ansonsten funktionieren Testserver und Client anstandslos miteinander. Die Registrierung durch RegisterXSClass im Client lautet derzeit natürlich aber ebenfalls:

Code:
initialization

  ...
  RemClassRegistry.RegisterXSClass(TWerteAbfrage, 'urn:IMEINInterfaceServiceIntf', 'TWerteAbfrage', 'TWerteAbfrage');
  RemClassRegistry.RegisterXSClass(TWerteAntwort, 'urn:IMEINInterfaceServiceIntf', 'TWerteAntwort', 'TWerteAntwort');
  ...
end.

Ich denke, ich muß abwarten, bis meine Schnittstelle zum Test vom Kunden zur Verfügung steht und dann gegebenenfalls anpassen lassen. Zum Glück ist das keine externe Schnittstelle, sondern steht nur für unsere Software zur Verfügung. Ich denke da sollte das machbar sein. Ich hatte nur gehofft, das es da eine Möglichkeit gibt.

Vielen Dank noch einmal und viele Grüße,

Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#4

AW: SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition

  Alt 12. Jul 2016, 08:36
Was klappt denn nicht? Welchen Fehler bekommst Du? Du brauchst doch eigentlich in der Regel gar nichts an der generierten soap.pas zu drehen, es sei denn Du läufst explizit in Fehler rein. Hier steht aber bisher nichts von Fehlern.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#5

AW: SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition

  Alt 12. Jul 2016, 10:42
Hallo Sherlock,

nein Fehler gibt es derzeit auch nicht.
Bei der Implementierung und beim Test ist mir lediglich aufgefallen, dass in der .WSDL ein Typ doppelt vorkommt, mit verschiedenen Eigenschaften (propertys).
Da ich derzeit nicht auf den Zielserver zugreifen kann (steht beim Kunden), geht es mir eigentlich nur darum zu erfahren, ob die Registrierung die Umleitung der Typen das schafft.

Also

Code:
initialization
  ...
  //                              [eigene Klasse]       [Server URL]            [eigener Klassenname][Name des Typs]
                                                                                   [    als String    ][  in WSDL   ]
  RemClassRegistry.RegisterXSClass(TWerteAbfrage, 'urn:IMEINInterfaceServiceIntf',     'TWerteAbfrage',    'TWerte'); // <- letzter Parameter doppelt vorhanden
  RemClassRegistry.RegisterXSClass(TWerteAntwort, 'urn:IMEINInterfaceServiceIntf',     'TWerteAntwort',    'TWerte'); // <- mit verschiedenen Definitionen
  ...
end.
oder anders als PseudoWSDL stark zusammengefasst:


Code:
             ...
         <xsd:element name="TObergruppe1">
             <xsd:element name="TWert">  // <- das Erste mal TWert
                <xsd:element name="Wert1" type="xsd:string">
                <xsd:element name="Wert2" type="xsd:string">
             </xsd:element>
         </xsd:element>

         <xsd:element name="TObergruppe2">
             <xsd:element name="TWert">  // <- und hier noch einmal
                <xsd:element name="Wert3" type="xsd:date">
                <xsd:element name="Wert4" type="xsd:string">
                <xsd:element name="Wert5" type="xsd:boolean">
                <xsd:element name="Wert6" type="xsd:integer">
                <xsd:element name="Wert7" type="xsd:string">
                <xsd:element name="Wert8" type="xsd:string">
             </xsd:element>
         </xsd:element>
           ...
Vielen Dank und Gruß,

Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.809 Beiträge
 
Delphi 12 Athens
 
#6

AW: SOAP: wsdl enthält Gleichnamige Schlüssel mit unterschiedlicher Definition

  Alt 12. Jul 2016, 11:21
Wogegen testest Du? Sowas wie SoapUI hoffentlich, und nicht einem selbst gebauten Server Mockup?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  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 16:12 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 by Thomas Breitkreuz