![]() |
Bei SOAP-ENV Header Namespace hinzufügen
Hallo Zusammen
Ich habe ein Problem mit dem erstellen eines XML's. Es geht dabei um den Soap Header, Beispiel:
Code:
Wie kriege ich es im Code hin den Namespace "xmlns:wsa="http://www.w3.org/2005/08/addressing"" zu definieren?
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> </SOAP-ENV:Header> <SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Hintergrundinfos: Das XML ist mit Absicht nicht weiter ausgefüllt, was darin steht spielt für das Problem keine Rolle. Im Soap Header kommen noch weitere Nodes rein, diese habe ich im Delphi mit einer TSoapHeader abgeleiteten Klasse definiert und danach mit "FRIO.SOAPHeaders.Send(Header);" hinzugefügt. Dies klappt auch prima. Nur den Namespace ("xmlns:wsa="http://www.w3.org/2005/08/addressing""), kriege ich nicht hin. Ich habe kein WSDL dazu, es sind eigens geschriebene Objekte. Mein Ziel wäre es nicht mit irgenwelchen "Replace" Funktionen oder ähnlichem rumzubasteln. |
AW: Bei SOAP-ENV Header Namespace hinzufügen
Vielleicht so:
Delphi-Quellcode:
LG Icocnito
Result := NewXMLDocument.GetDocBinding('dingsbums', TXMLIrgendwas, TargetNamespace) as IXMLIrgendwas;
Result.DeclareNamespace('wsa', 'http://www.w3.org/2005/08/addressing'); |
AW: Bei SOAP-ENV Header Namespace hinzufügen
Sorry wenn ich mich dumm anstelle, aber ich versuche deine Frage zu verstehen.
Der Soap-Webserverice liegt nicht als Quellocde oder WSDL oder als Interface typ vor? Und du hättest gerne einen SOAP Client der den Webservice bedient? Das einzige was du hast ist eine Mitgeschnittenes Kommunikationsbeispiel? Ist das hier hilfreich? Unter dem Inhaltsverzeichnis ist ein Beispiel XML . ![]() |
AW: Bei SOAP-ENV Header Namespace hinzufügen
Sorry für die ungenaue Beschreibung, ich versuche es nochmals ein bisschen genauer.
Ich habe schon eine WSDL, welche aber nicht von mir kommt und ich nicht anpassen kann/darf. Im WSDL ist aber der Header nicht definiert sondern nur der Body. Den Header muss ich manuell vor dem versenden des XML's über "FRIO.SOAPHeaders.Send(Header);" hinzufügen. Wobei hier "Header" meine eigene Klasse abgeleitet von TSoapHeader ist, welche aber nur den Teil zwischen "<SOAP-ENV:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">" und "</SOAP-ENV:Header>" definiert. Mir ist nun nicht klar, wie ich auf den Node "SOAP-ENV:Header" zugreifen kann. Zitat:
@Incocnito funktioniert leider nicht, da ich nicht ein neues XMLDocument erstelle. Das DeclareNamespace kenne ich und ist wahrscheinlich die Antwort, aber es muss auf der richtigen Node gemacht werden, ich weiss nur nicht wie ich zu dieser Node komme. Hoffe ich konnte das Problem nochmals ein bisschen besser erklären. |
AW: Bei SOAP-ENV Header Namespace hinzufügen
OK.
Also du möchtest selber machen was der THTTPRIO Client den man bei der Codegeneration verwendet schon von alleine macht? Ich lasse das leider immer von Delphi machen. Kann dir also dann wohl doch nicht helfen es von hand zu machen. Ich lasse einfach dieses batchfile(je nach service angepasst) laufen und erhalte einen funktionierenden client.
Code:
c:
cd C:\MyClient powershell.exe -Command "(new-object System.Net.WebClient).DownloadFile('http://MyService:8080/wsdl/IMYClient','MYClientWSDL.xml') " Pause c: CD C:\Program Files (x86)\Embarcadero\Studio\21.0\bin WSDLIMP -P -Ov+ -Oz- -DC:\MyClient C:\MyClient\MYClientWSDL.xml |
AW: Bei SOAP-ENV Header Namespace hinzufügen
Also es gibt in der Unit
Delphi-Quellcode:
eine Klasse
Soap.SOAPENV
Delphi-Quellcode:
mider der Methode
TSoapEnvelope
Delphi-Quellcode:
Wenn du die mit der option
MakeHeader
Delphi-Quellcode:
aufrufst erzeugt sie den header mit dem von dir gewünschten namespace
[soSOAP12]
der namespace ist in der konstante Unit Soap.SOAPConst
Delphi-Quellcode:
hilft das?
SSoapNamespace = 'http://schemas.xmlsoap.org/soap/envelope/'; { do not localize }
SSoap12Namespace = 'http://www.w3.org/2003/05/soap-envelope'; { do not localize } SOAPEnvelopeNamespaces: array[Boolean] of string = (SSoapNamespace, SSoap12Namespace); |
AW: Bei SOAP-ENV Header Namespace hinzufügen
@QuickAndDirty Hmmm ich hab es mir angeschaut und es sieht schon so aus, als könnte es helfen.
Leider finde ich bei mir nicht die richtige Stelle. Mein XMLDocument ist bereits im THTTPRIO und ich kann nicht mehr darauf zugreifen :( Bzw. weiss ich nicht wie, das sollte doch irgendwie gehen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 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-2025 by Thomas Breitkreuz