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