我的代码中有一个警告,我不知道如何删除。该方法是一个实用程序方法,调用 THTTPRIO 的 FConverter 字段的 IOPConvert.ProcessResponse
方法。
IOPConvert 中有多个 ProcessResponse 的重载版本,其中一个是使用参数类型 InvString
声明的版本。因为第一个参数已被弃用。
在整个 Delphi SOAP RTL 中,从 Delphi 7 到现在 (Delphi XE/XE2),趋势已经从字符串类型转向流类型。
问题是为什么?在这种情况下,我什至无法弄清楚如何转换我的帮助程序代码,除非我添加一个丑陋的字符串流包装器:
TRIOHelper = class helper for THTTPRIO
public
function HelperMethod(aMethName: String; aSoapString: String) : TRemotable;
end;
function TRIOHelper.HelperMethod(aMethName, aSoapString: String): TRemotable;
var
tmpString:String;
begin
//FConverter is a field in THTTPRIO
tmpStr := GrievousXmlHackery(aSoapString);
FConverter.ProcessResponse(InvString(tmpStr), IntfMD, MethMD, FContext);
...
end;
已弃用的调用上方的代码正在调整 XML 文档(SOAP 响应)并从传入流中删除一些有问题的元素。是的,一个黑客。我应该如何更改它,为什么 OpConvert 中的字符串不好?
我想我需要为 tmpString 制作一个字符串流或内存流包装器?请注意,在我的例子中,GrievousXmlHackery 函数删除了 <encoding>
标签(如果存在)出于邪恶原因从 SOAP 中删除,但在这里仍然不重要。
除非旧方法和基于字符串的 api 在技术上确实存在错误,否则我将忍受该警告。但是如果(像 VCL 中的许多地方一样),已弃用的警告也意味着“这里有龙”,我想知道它。
最佳答案
我不熟悉 Delphi 的 SOAP 实现,但为什么不能直接使用 TStringStream
来代替呢?
function TRIOHelper.HelperMethod(aMethName, aSoapString: String): TRemotable;
var
Strm: TStringStream;
begin
//FConverter is a field in THTTPRIO
Strm := TStringStream.Create(GrievousXmlHackery(aSoapString));
// or
// Strm := TStringStream.Create('');
// Strm.DataString := GreviousXmlHackery(aSoapString);
FConverter.ProcessResponse(Strm, IntfMD, MethMD, FContext);
// Not sure if you or THTTPRIO is responsible for releasing the stream
...
end;
关于delphi - 如果某些 Delphi SOAP RTL OpConvert.pas 方法使用 String 而不是 Stream 作为其 XML 文档类型,为什么它们会被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896823/