AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Soap-Service: XML-Fehler

Ein Thema von bcvs · begonnen am 1. Feb 2023 · letzter Beitrag vom 2. Feb 2023
Antwort Antwort
Seite 1 von 2  1 2      
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#1

Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 11:39
Hallo zusammen,

Ich bastele an einem SOAP-Client (MyDHLAPI von DHL Express).


Beim Aufruf der aus der wdsl importieren Function getRateRequest erhalte ich diesen Fehler:

Zitat:
Ein XML-Dokument muss ein Element der obersten Ebene enthalten.
Zeile: 0
Mein Code sieht so aus:
Delphi-Quellcode:
procedure TDHLExpress.DoRateRequest;
var Request:RateRequest; // aus der wdsl
    Response:RateResponse; // aus der wdsl
    DHLExpressService:gblExpressRateBook; // aus der wdsl
    DhlExpressHeader:TDHLExpressSoapHeader;
    RIO : THTTPRIO;
begin
  RIO := THTTPRIO.Create(nil);
  RIO.OnAfterExecute :=HTTPRIOAfterExecute;
  RIO.OnBeforeExecute:=HTTPRIOBeforeExecute;

  DHLExpressService:=GetgblExpressRateBook(false, '', RIO);

  DhlExpressHeader :=TDHLExpressSoapHeader.Create; // Für Authentication
  DHLExpressHeader.User:=fUser;
  DHLExpressHeader.Signature:=fSignature;

  Request:=RateRequestCreate; // Hier wird der Request zusammengebaut
  try
    (DHLExpressService as ISOAPHeaders).Send(DHLExpressHeader);
    Response:=DHLExpressService.getRateRequest(Request); // Hier kommt der Fehler
  finally
    Request.Free;
    DhlExpressHeader.Free;
  end;
end;
In HTTPRIOBeforeExecute und HTTPRIOAfterExecute cheche ich, was in SOAPRequest bzw. in SOAPResponse drin steht. SOAPRequest ist in Ordnung, SOAPResponse ist leer.

In einem ähnlichen Fall mit einer anderen API von DHL (nicht Express) funktioniert alles nach diesem Schema bestens.

Was könnte da passiert sein?
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
314 Beiträge
 
Delphi 12 Athens
 
#2

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 12:55
Also der Fehler "Ein XML-Dokument muss ein Element der obersten Ebene enthalten." kommt wahrscheinlich nur, weil der SOAP-Server eine leere bzw. gar keine Antwort gesendet hat. Das ist quasi so, als würde man eine leere Textdatei als XML-Dokument einlesen wollen.

Zur Lösungsfindung würde ich zuerst die komplette Aufruf-URL in den Browser werfen und sehen, ob da eine Antwort kommt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 13:02
Delphi/Indy-Update?

Ich hab grade den Fall bei einer REST-Komponente.
Alter Code läuft, aber im neuen Delphi nicht.

Die Anfrage/Response ist anders, daher liefert der REST-Server nichts, bzw. was Falsches.

Wir wollen JSON, aber jetzt sendet das Ding teilweise XML zurück, bzw. auch gern mal leere Daten.
Code:
[ XE ]
GET /user/getErpPublicKey HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: localhost:9999
Accept: text/html, */*
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)

[ 11 ]
GET /user/getErpPublicKey HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: localhost:9999
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/3.0 (compatible; Indy Library)

[ 11 + IdHTTP.Request.Accept := 'application/json'; ]
GET /user/getErpPublicKey HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: localhost:9999
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#4

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 13:42
Bei der Arbeit mit Indy hilft es kolossal hier User-Agent: Mozilla/3.0 (compatible; Indy Library) was aktuelleres zuzuweisen.

Z. B. das, was Dir diese Seite, aus Deinem Lieblingsbrowser aufgerufen, anzeigt.

Etliche Webserver liefern beim "OriginalIndyUserAgent" keine Antwort oder nur, dass ihnen der Browser etwas zu alt ist und man doch lieber was Neueres nehmen sollte.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 14:12

Zitat:
Ein XML-Dokument muss ein Element der obersten Ebene enthalten.
Zeile: 0
Wie sehen denn der HTTP Request und die HTTP Response als Text aus?

Alternativ zum Debugger könnte ein loggender HTTP Proxy wie Fiddler2 - https://www.telerik.com/fiddler - eingesetzt werden. (Oder ein Packet Sniffer).

Update:
Zitat:
SOAPRequest ist in Ordnung, SOAPResponse ist leer.
Wenn der Request ok ist, könnte man ihn z.B. via Postman oder Curl senden um dann mehr über die Response zu erfahren. SoapResponse enthält vermutlich nicht die HTTP Headerzeilen.
Michael Justin

Geändert von mjustin ( 1. Feb 2023 um 14:15 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#6

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 14:38
[QUOTE=mjustin;1518161]
Wie sehen denn der HTTP Request und die HTTP Response als Text aus?
Wie komme ich denn daran? In dieser SOAP-Geschichte läuft das ja über den THTTPRIO.

Zitat:
Wenn der Request ok ist, könnte man ihn z.B. via Postman oder Curl senden um dann mehr über die Response zu erfahren. SoapResponse enthält vermutlich nicht die HTTP Headerzeilen.
Genau. SoapResponse ist komplett leer. Das mit Postman probiere ich mal aus.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#7

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 16:18
Ich glaube, dieses Postman bringt mich ein Stück weiter:

Wenn ich meinen SOAPRequest damit abschicke, kommt auch dort kein Response an.

Aber: Mein SOAPRequest enthält einen Header zur Authentifizierung:
Code:
     <SOAP-ENV:Header>
          <ns2:Security env:mustUnderstand="true">
               <ns2:UsernameToken ns3:Id="UsernameToken-4C578AF5E8CBB3162A14952041422019">
                    <ns2:Username>******</ns2:Username>
                    <ns2:Password Type="&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">******</ns2:Password>
                    <ns2:Nonce EncodingType="&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">SC4DEqvj1tX0yuY6sFXMvQ==</ns2:Nonce>
               </ns2:UsernameToken>
          </ns2:Security>
     </SOAP-ENV:Header>
Wenn ich den weglasse, kommt immerhin ein Response an, der logischerweise besagt, dass man Unauthorized ist:
Code:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header></env:Header>
    <env:Body>
        <env:Fault>
            <faultcode>env:Server</faultcode>
            <faultstring></faultstring>
            <detail fault:type="Unauthorized" xmlns:fault="http://www.dhl.com/soapfaults"></detail>
        </env:Fault>
    </env:Body>
</env:Envelope>
Also stimmt da anscheinend etwas mit diesem Header nicht.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 16:32
Code:
                    <ns2:Password Type="&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">******</ns2:Password>
                    <ns2:Nonce EncodingType="&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">SC4DEqvj1tX0yuY6sFXMvQ==
Was mir auffällt: ... Password Type="&quot; ... und EncodingType="&quot;, also ein kodiertes " am Anfang, aber kein schliessendes " am Ende des Attributs.

Sind diese &quot; am Anfang des Attributs so vorgesehen?
Michael Justin
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#9

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 16:41
Nein, die &quot; waren falsch. Die gehören da nicht hin. Daran liegt es aber nicht. Ohne erhalte ich das selbe Ergebnis.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#10

AW: Soap-Service: XML-Fehler

  Alt 1. Feb 2023, 16:49
Vielleicht mit Anderen ähnlichen Problemen vergleichen?

https://www.google.com/search?q=%22n...tUnderstand%22

Es gibt da z.B. so Hinweise wie
Zitat:
du scheinst die Soap-Version 1.1 zu verwenden, die geforderten Header sehen aber nach Version 1.2 aus.
uvm.




Einige SOAP-Services kann man auf JSON umstellen
z.B. accept: application/json,*/*
Dort sieht das Ganze eventuell viel einfacher und nicht so vernamespaced aus.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Feb 2023 um 16:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:51 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