В моем коде есть предупреждение, что я не могу понять, как удалить. Этот метод представляет собой служебный метод, который вызывает метод IOPConvert.ProcessResponse
поля THonTPrio для поля FConverter.
Существует несколько перегруженных версий ProcessResponse в IOPConvert, и та, которая объявлена с параметром типа InvString
в качестве первого параметра, является устаревшей.
В Delphi SOAP RTL наблюдается тенденция отхода от типов String до типов потоков, начиная с 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?
Полагаю, мне нужно создать оболочку String Stream или Memory Stream для tmpString? Обратите внимание, что в моем случае функция GrievousXmlHackery удаляет тег <encoding>
при его наличии из SOAP по злым причинам, которые здесь не важны.
Если не существует чего-то технически НЕПРАВИЛЬНОГО со старыми методами и apis на основе строк, я собираюсь смириться с предупреждением. Но если (как и во многих местах в VCL) устарелое предупреждение также означает «здесь будут драконы», я хотел бы знать об этом.