Einzelnen Beitrag anzeigen

mts

Registriert seit: 14. Dez 2008
24 Beiträge
 
Delphi XE4 Professional
 
#1

WSDL-Import soap-header werden nicht gesendet

  Alt 25. Jan 2015, 17:35
Hallo zusammen,

ich muss die TimeInTransitRequest-API von UPS in einer Anwendung nutzen.
UPS bietet dafür einen SOAP-Service und liefert ein WSDL-File, welches ich importiert habe.
Soweit so gut.

Problem ist nun, dass der Security-Header nicht im Header übertragen wird.
Im erzeugten WSDL-File finde ich folgende Zeile:
InvRegistry.RegisterHeaderClass(TypeInfo(TimeInTransitPortType), UPSSecurity, 'UPSSecurity', 'http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0'); Die entsprechende Header-Klasse ist auch implementiert:
Delphi-Quellcode:
  UPSSecurity = class(TSOAPHeader)
  private
    FUsernameToken: UsernameToken;
    FServiceAccessToken: ServiceAccessToken;
  public
    destructor Destroy; override;
  published
    property UsernameToken: UsernameToken read FUsernameToken write FUsernameToken;
    property ServiceAccessToken: ServiceAccessToken read FServiceAccessToken write FServiceAccessToken;
  end;
Wenn ich mir nun die erzeugte XML-Datei anschaue sehe ich aber dass die UPSSecurity-Klasse nicht in den Header gesetzt wurde, sondern in den Body.

Code:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Body>
      <TimeInTransitRequest xmlns="http://www.ups.com/XMLSchema/XOLTWS/tnt/v1.0">
         <Request xmlns="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0">
            <RequestOption>TNT</RequestOption>
         </Request>
         <ShipFrom>
            <Address>
               <City>asdfasdfasdf</City>
               <CountryCode>DE</CountryCode>
               <PostalCode>34566</PostalCode>
            </Address>
         </ShipFrom>
         <ShipTo>
            <Address>
               <City/>
               <CountryCode/>
               <PostalCode/>
            </Address>
         </ShipTo>
         <Pickup>
            <Date>20150125</Date>
         </Pickup>
         <ShipmentWeight>
            <UnitOfMeasurement>
               <Code>KGS</Code>
            </UnitOfMeasurement>
            <Weight>0</Weight>
         </ShipmentWeight>
         <TotalPackagesInShipment>1</TotalPackagesInShipment>
         <InvoiceLineTotal>
            <CurrencyCode>EUR</CurrencyCode>
            <MonetaryValue>0,00</MonetaryValue>
         </InvoiceLineTotal>
      </TimeInTransitRequest>
      <NS1:UPSSecurity xmlns:NS1="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0">
         <NS1:UsernameToken>
            <Username xmlns="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0">USERNAME</Username>
            <Password xmlns="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0">PASSWORD</Password>
         </NS1:UsernameToken>
         <NS1:ServiceAccessToken>
            <AccessLicenseNumber xmlns="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0">1234</AccessLicenseNumber>
         </NS1:ServiceAccessToken>
      </NS1:UPSSecurity>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Kann mir jemand weiterhelfen?
Ich könnte jetzt natürlich per Hand den Header schreiben, aber das kann ja nicht Sinn der Sache sein...

P.S. Ich nutze Delphi XE4


Vielen Dank schon mal
mts
  Mit Zitat antworten Zitat