Здравствуйте, столкнулся с проблемой.
Отправляю XML файл с помощью Indy 10 методом Post
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | Function PostFile(url: string ;filename: string ): string ;
var data: TIdMultiPartFormDataStream;
GetResult:TStringStream;
PostXML: TIdHTTPAccess;
begin
PostXML:=TIdHTTPAccess . Create( nil );
PostXML . Request . ContentEncoding := 'utf-8' ;
PostXML . Request . ContentType := 'text/xml' ;
data:=TIdMultiPartFormDataStream . Create;
GetResult:=TStringStream . Create( '' );
try
data . AddFile( 'xml_file' ,filename, 'text/xml' );
try
PostXML . Post(url,data,GetResult);
result:=UTF8Decode(GetResult . DataString);
Except
on E: Exception do
begin
result:=result+E . Message;
end ;
end ;
finally
data . Free;
PostXML . Free;
end ;
end ;
|
XML файл бывает не соответствует схеме XSD, мне нужно узнать в Responce (результате отправки), какова причина не соответствия, где именно ошибка в XML файле. Через Curl выдает при отправке корректно.
Код HTML:
<A><error>org.xml.sax.SAXParseException; cvc-pattern-valid: Value '' is not facet-valid with respect to pattern '(\d{10}|\d{12})' for type 'INNType'.</error><ver>2</ver></A>
А через Indy всегда выдает HTTP/1.1 500 Server Error.
Как можно это сделать? Про отдельную валидацию XML по схеме и структуре знаю, у меня это осуществляется, меня конкретно интересует получение правильного ответа от сервера.