WDSL spec to Soap object question.
According to the doc, the GetPartyByGLN should have a request header element – but I can’t see how to set it up in the generated code.
Does anyone know if the “Cannot unwrap” statement indicates a failure to build a complete interface?
routerSoap = interface(IInvokable)
[‘{0665B92C-D719-C758-A143-D08E93CE967A}’]
// Cannot unwrap:
// – More than one strictly out element was found
// Headers: gepirRequestHeader:pIn, gepirResponseHeader:pOut
function GetPartyByGLN(const requestBody: GetPartyByGLN): gepirParty; stdcall;

A little more detail, the Soap 1.2 header should look like this:
POST /router/router.asmx HTTP/1.1
Host: glnservice1.gs1.no
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:soap12=”http://www.w3.org/2003/05/soap-envelope“>
<gepirRequestHeader xmlns="http://www.removed.adr/“>
string
int
<GetItemByGTIN version="decimal" xmlns="http://www.gepir.org/“>
string
language
language
Ah, SOAP. One thing I don’t miss at all from a few jobs ago…
http://harmful.cat-v.org/software/xml/soap/simple
Turns out the APIs worked fine without the header.
Update – well, sort of fine. The resultCode is in the gepirResponseHeader block which is not exposed in the gepirParty type, but resides in the soap header.
Any tip on how to modify the code to expose two different result blocks are more than welcome.
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<gepirResponseHeader xmlns="http://www.gepir.org/“>*
string
int
int
*<gepirParty version="decimal" ="" xmlns="http://www.gepir.org/“>
string
nonNegativeInteger
string
dateTime
string
string
string
string
string
string
…