I have a SOAP application created with delphi.
Input comes to server correct. But output is always empty. r
object (response) created, but length
In the Server, to go to the SOAP web module, select the HTTPSoapPascalInvoker component, and open up the Options property in the Object Inspector. Make sure the option "soRootRefNodesToBody" is checked. That will ensure that in the SOAP resonse, the elements are passed outside of the response node, in the body, where the client can find them.
Groetjes, Bob Swart
Use SoapUI to send a request and see if anything is in the response. Working with objects is convenient, but sometimes you have to get down into the lower level and see the XML that's actually being sent. SoapUI is your friend here.
Thanks to all. All works fine with this code:
Interface part:
interface
const
IS_OPTN = $0001;
IS_UNBD = $0002;
type tNoteCollection=class(tremotable)
private
fnotes:TnoteStructure;
procedure Setnotes(Index: Integer; const anotes: TnoteStructure);
published
property notes:TnoteStructure index(IS_OPTN or IS_UNBD) read fnotes write setnotes;
procedure setlen(count:byte);
function getlen:integer;
end;
implementation
procedure tNoteCollection.setlen(count:byte);
begin
setlength(fnotes,count);
end;
function tNoteCollection.getlen:integer;
begin
result:=length(fnotes);
end;
procedure tNoteCollection.Setnotes(Index: Integer; const anotes: TnoteStructure);
begin
fnotes:=anotes;
end;
Implementation part:
function Tcis2opus.GetNotes(ClientInformationStructure:TClientInformationStructure)
: tNoteCollection;
begin
try
result:=tNoteCollection.Create;
result.setlen(1);
result.notes[0]:=tnote.create;
result.notes[0].NotetId:=inttostr(random(100));
result.notes[0].AuthorUserName:='!1!'+ClientInformationStructure.ClientApplicationName;
result.notes[0].SequenceNumber:=999;
except
on e:exception do addtolog(e.Message)
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var c:tclientinformationstructure;
r:tNoteCollection;
begin
c:=tclientinformationstructure.Create;
try
c.ClientApplicationName:=labelededit1.Text;
c.ClientApplicationPassword:=labelededit2.Text;
c.RequestIdentifier:=labelededit3.Text;
c.StartSequenceNumber:=strtointdef(labelededit4.Text,0);
c.NumberOfNotes:=strtointdef(labelededit5.Text,0);
r:=nil;
r:=(HTTPRIO1 as iCIS2Opus).GetNotes(c);
if r.getlen>0 then
if assigned(r.notes[0]) then showmessage(r.notes[0].AuthorUserName);
finally
if assigned(c) then freeandnil(c);
if assigned(r) then freeandnil(r);
end;
end;