Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Synapse отправка XML - Delphi

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

tarakan19831



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, помогите пожалуйста разобраться с отправкой XML файла.
по инструкции

Цитата:
Сформировать xml-файл (client.xml — название файла) вида  для запроса
реквизитов организации:

Код:
<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents Version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef"
xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters">
<ns:Owner>
<ns:FSRAR_ID>00040218</ns:FSRAR_ID>
</ns:Owner>
<ns:Document>
<ns:QueryClients>
<qp:Parameters>
<qp:Parameter>
<qp:Name>ИНН</qp:Name>
<qp:Value>1681000049</qp:Value>
</qp:Parameter>
</qp:Parameters>
</ns:QueryClients>
</ns:Document>
</ns:Documents>

Отправить запрос (1.5.1) в УТМ с помощью команды вида:
curl -F''xml_file=@client.xml'' http://localhost:8080/opt/in/QueryPartner
 

Что я и делаю

Код:
procedure TFmMain.BitBtn2Click(Sender: TObject);
  var
    XMLDoc : TXMLDocument;
    HTTP : THTTPSend;
    FS: TFileStream;
    s : string;
begin
  try
    Memo1.Clear;
    XMLDoc := TXMLDocument.Create(Application);
    with XMLDoc do
      begin
        Options := Options + [doNodeAutoIndent];
        Active := True;
        Version := '1.0';
        Encoding := 'UTF-8';
        with AddChild('ns:Documents') do
          begin
            Attributes['Version'] := '1.0';
            Attributes['xmlns:xsi'] := 'http://www.w3.org/2001/XMLSchema-instance';
            Attributes['xmlns:ns'] := 'http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01';
            Attributes['xmlns:oref'] := 'http://fsrar.ru/WEGAIS/ClientRef';
            Attributes['xmlns:qp'] := 'http://fsrar.ru/WEGAIS/QueryParameters';
            with AddChild('ns:Owner') do ChildValues['ns:FSRAR_ID'] := '020000616195';
            with AddChild('ns:Document') do
              with AddChild('ns:QueryClients') do
                with AddChild('qp:Parameters') do
                  with AddChild('qp:Parameter') do
                    begin
                      ChildValues['qp:Name'] := 'ИНН';
                      ChildValues['qp:Value'] := '6143063881';
                    end;
            SaveToFile('C:\temp\client.xml');
          end;
      end;
    FS := TFileStream.Create('C:\temp\client.xml', fmOpenRead);
    FS.Position := 0;
    HTTP := THTTPSend.Create;
    HTTP.Document.CopyFrom(FS, FS.Size);
    //HTTP.Document.SaveToFile('C:\temp\client111.xml'); //Проверка, что документ есть
    if HTTP.HTTPMethod('POST', 'http://localhost:8080/opt/in/QueryPartner') then
      begin
        s := HTTP.ResultString+':'+IntToStr(HTTP.ResultCode);
        ShowMessage(s);
        Memo1.Lines.Add(s);
      end;
  finally
    FreeAndNil(XMLDoc);
  end;
end;

Получаю ошибку

Цитата:
Server Error:500

Подскажите где я ошибся???

Всего записей: 171 | Зарегистр. 22-11-2009 | Отправлено: 18:22 20-01-2016
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tarakan19831, а работает так?
 

Цитата:
curl -F''xml_file=@client.xml'' http://localhost:8080/opt/in/QueryPartner


Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 20:04 20-01-2016
tarakan19831



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А у меня curl не установлен, что-то я не подумал так проверить, спасибо за намек, ща попробую этой "курвой" отправить
 
Добавлено:
curl отправляет и присваивает идентификатор отправленному файлу
такой
 
<url replyId="7a1ab04b-28e8-434f-ad34-2107b08944c9">http://localhost:8080/opt/in/QueryPartner/13</url>
 
что не так с Synapse????? я прям в ужасе

Всего записей: 171 | Зарегистр. 22-11-2009 | Отправлено: 20:07 20-01-2016
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tarakan19831, HTTPMethod же только отправляет данные, он не формирует сам запрос. Т.е. все заголовки надо заполнить ручками. Возможно этот пост поможет http://www.webdelphi.ru/2011/06/synapse-otpravka-dannyx-na-server-na-primere-imagevenue-com/

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 20:47 20-01-2016
tarakan19831



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В логах сервера нашел сообщение
 
2016-01-20 22:19:13,761 WARN  org.eclipse.jetty.servlet.ServletHandler - /opt/in/QueryPartner
javax.servlet.ServletException: Content-Type != multipart/form-data
    at org.eclipse.jetty.server.Request.getParts(Request.java:2051)
 
В инструкции к curl  
 
параметр -F  
Данный параметр позволяет curl эмулировать заполненной формы, в которой пользователь нажал кнопку "отправить". Программа вызывает метод POST, используя Content-Type multipart/form-data в соответствии с  RFC 2388, что дает возможность в том чисел и загрузить бинарные файлы.
 
Как только это все связать??? не пойму

Всего записей: 171 | Зарегистр. 22-11-2009 | Отправлено: 22:23 20-01-2016
HekTo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробуйте HttpPostFile();
 
Из справки по Synapse:

Цитата:
 

Код:
 
function HttpPostFile(const URL, FieldName, FileName: string; const Data: TStream; const ResultData: TStrings): Boolean;
 

 
A very useful function, and example of use can be found in the THTTPSend object. It implements the POST method of the HTTP protocol. This function sends the POST method for a URL document to an HTTP server. This function simulate posting of file by HTML form used method 'multipart/form-data'. Posting file is in DATA stream. Its name is Filename string. Fieldname is for name of formular field with file. (simulate HTML INPUT FILE) The returned document is in the ResultData Stringlist. Returns boolean TRUE if all went well.
 

 
Как я понимаю FieldName = 'xml_file', FileName = '@client.xml' (нужна ли собака - вопрос).

Всего записей: 186 | Зарегистр. 30-09-2003 | Отправлено: 21:33 27-01-2016 | Исправлено: HekTo, 21:37 27-01-2016
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Synapse отправка XML - Delphi


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru