I've imported some wsdl for a project. i want to change the SoapRequest on HttpRio onBeforeExecute event, but as i changed the request, im getting some errors how can i change the request xml file with stringReplace function on this event.
i've tried to change the size of stream, i ve changed the encoding etc. but anyway it didnt work.
example
procedure TForm1.RiomBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
sTmp : TStringList;
begin
sTmp:=TStringList.Create;
SOAPRequest.Position := 0;
sTmp.LoadFromStream(SOAPRequest);
sTmp.Text := StringReplace(sTmp.Text,'blablaa','bla',[RfReplaceAll]);
sTmp.SaveToStream(SOAPRequest);
// blaa blaa...
end;
procedure TForm1.RiomBeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
sTmp : TStringList;
begin
sTmp:=TStringList.Create;
SOAPRequest.Position := 0;
sTmp.LoadFromStream(SOAPRequest);
sTmp.Text := StringReplace(sTmp.Text,'blablaa','bla',[RfReplaceAll]);
**SOAPRequest.Postion:=0**;// i forget this here, as i write the code that worked
sTmp.SaveToStream(SOAPRequest);
// blaa blaa...
end;
Possible enhancement... I found, with my situation (and this was in the soap response, btw, in case it matters), that if the resulting request is shorter than the original (and in your case it is), there was crud left over when the new string is written back out to the stream.
ex:
original: <blablaa some stuff>
intended: <bla some stuff>
actual: <bla some stuff>uff>
Fix:
SOAPRequest.Postion:=0;// i forget this here, as i write the code that worked
SOAPRequest.size := length(sTmp.Text); // Important - set new length before saving.
sTmp.SaveToStream(SOAPRequest);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With