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.006 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.800 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.800 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
danielA

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

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

  Alt 13. Jul 2016, 09:48
Hallo Sherlock,

nein war/ist ein eigener Mockup.
Der Hinweis auf SoapUI ist aber echt Gold wert. Danke dafür.
Ich habe mein Problem zwar noch nicht ganz klären können, gehe aber momentan davon aus, dass doch nicht mit den Delphieigenen SOAP Komponenten/Importen laufen zu lassen, sondern die Anfrage direckt über HTTP POST zu senden und anschließend die XML-Antwort auszuwerten. SoapUI zeigt einem ja schon Haarklein, wie die Anfrage aussehen muß. Am Header muß ich noch basteln aber das bekomme ich noch hin. Auf jeden Fall hätte ich dann meine doppelten Typen, da das unter reinem XML, in der Form, kein Problem darstellen sollte. Die XSDs habe ich ja ebenfalls.

Die SOAP-Komponenten empfinde ich als sehr nett und man ist bestimmt in der Lage ein sich bereits bewährtes funktionierend sauberes System sehr schnell zu implementieren. Ich benötige jedoch möglichst viel flexibilität um schnell agieren zu können. Dafür erscheinen sie mir dann doch leider etwas zu undurchsichtig.

Vielen Dank noch einmal für Eure Hilfe, hat mir Echt geholfen.

viele Grüße,

Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

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

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

  Alt 13. Jul 2016, 10:11
Hmm, flexibel ist es eigentlich schon. Mußt halt lediglich bei jeder Änderung am wsdl neu importieren. Ich würde das alles nicht selbst machen wollen. Aber wenn Du soweit damit zurecht kommst, warum nicht?

Viel Erfolg weiterhin!

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 09:33 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