Я только что сделал один из них, и я закончил серией строковых вызовов, чтобы изменить вывод XML, чтобы убрать встроенные пространства имен и сделать его похожим на формат SoapUI. Да, для этого требуется много ручного взлома.
например:
После того, как вы создадите RIO, вызовите свой собственный процесс BeforeExecute:
...
EEUPSERTRIO.OnBeforeExecute := self.RIO_BeforeExecute;
...
procedure TMyWrapper.RIO_BeforeExecute(const MethodName: string; var SOAPRequest: WideString);
{
Since Delphi isn't very good at SOAP, we need to fix the request so that the namespaces are correct.
Basically, you take what Delphi gives you and try it in SoapUI.
If yours doesn't work and SoapUI's version does, make yours look like theirs.
}
...
Теперь удалите встроенные пространства имен:
SOAPRequest := StringReplace(SOAPRequest,' xmlns:NS1="http://services.xxx.de/xxx"','',[rfReplaceAll,rfIgnoreCase]);
...
Многие из них.
Затем вы замените мыльный заголовок на заголовок, содержащий нужные вам пространства имен.
SOAPRequest := StringReplace(SOAPRequest,'xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"','xmlns:ns1="http://services.xyzcorp.com/xyz/EnterpriseEmployeeService_1_0" '+'xmlns:ns1="http://schemas.xyzcorp.com/TLOIntegration_HRO_Preview/TLOIntegration_1_0" ',[]);
Тогда вы можете повторно ввести хорошие:
ReplaceTag(SOAPRequest,'<metaData>','ns1:');
ReplaceTag(SOAPRequest,'<trackingId>','ns1:');
ReplaceTag(SOAPRequest,'<srcSystem>','ns1:');
Наконец, вы можете легко перехватить выходные данные Delphi, повторно используя WSDL с SoapUI и размещая на нем mockservice. Затем укажите ваше приложение в качестве конечной точки, и оно будет захватывать выходные данные.
Или вы можете использовать Fiddler в качестве прокси для захвата запросов.