Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2010.12.05;
Скачать: [xml.tar.bz2];

Вниз

Импорт WSDL для SOAP-клиента не работает!   Найти похожие ветки 

 
UnDISCOvery   (2008-12-22 20:32) [0]

Привет, Мастера!
Задача у меня банальная - написать клиента для SOAP.
Прочитал доки, факи - создал тестовый сервер и клиент, там все отлично работало. Думал, что разобрался и приступил к реализации. Вот тут-то и натолкнулся на трудности...
Мне предоставили wsdl-файл (http://www.airts.ru/webservices/2009/01/ATS_RailReservationRQ.wsdl).
Сгенерировал с помощью него интерфейсный модуль.
Пробую отправить данные на сервер - он не может даже входные параметры корректно создать!
--- кусок кода. начало ---
procedure TfmATS_RailReservClient.btnTestClick(Sender: TObject);
var
 TmpMsgHeader : MessageHeader;
 TmpRailAvailRQ : ATS_RailAvailRQ;
 TmpRailAvailRS : ATS_RailAvailRS;
begin
 TmpMsgHeader := MessageHeader.Create;
 TmpMsgHeader.SessionId := "1234567890";
 TmpMsgHeader.MessageData.TimeToLive.AsDateTime := Now - 1; { !!! ТУТ Access Violation !!!}
 TmpRailAvailRQ := ATS_RailAvailRQ.Create;
 TmpRailAvailRS := (HTTPRIO1 as RailReservationRQPortType).RailAvailRQ(TmpMsgHeader,TmpRailAvailRQ);
 memoRailRS.Lines.Text := DateTimeToStr(TmpMsgHeader.MessageData.TimeToLive.AsDateTime);
end;
--- кусок кода. конец ---
TmpMsgHeader - является первым входным параметров для вэб-сервиса. Как видно из примера SessionId назначается нормально, но MessageData.TimeToLive не назначается.
Таким образом и в остальном: простые параметры доступны, составные - нет!
Лезу в сгенерированный модуль - там интересная штука: деструкторы для составных(вложенных) типов есть, а конструкторов нет. Поэтому они все nil, поэтому и AV в итоге.

Как быть? Неужели все такие классы руками прописывать надо? О ужас!
Или может что-то настроить в WSDL Importer, а?
Помогите!
Заранее, спасибо.


 
Palladin ©   (2008-12-23 06:54) [1]


>  а конструкторов нет

Кто это сказал? Есть. У родителя.


> Поэтому они все nil

да ну конечно...


 
Плохиш ©   (2008-12-23 12:00) [2]


> UnDISCOvery   (22.12.08 20:32)
>
>


> Как быть?

В спецификации языка делфи написано, что все объекты должны быть созданы перед использованием.


 
UnDISCOvery   (2008-12-24 15:25) [3]

2 Palladin:
У какого родителя? Если у первичного объекта, то да - конечно есть.
Вот он в примере -> TmpMsgHeader := MessageHeader.Create;
Но в том то вся и штука, что это конструктор именно родителя, а не собственный переопределенный.
---
MessageHeader = class(TSOAPHeader)
 private
   FFrom: From;
   FTo_: To_;
   FCPAId: CPAId;
   FCPAKey: non_empty_string;
   FCPAKey_Specified: boolean;
   FConversationId: ConversationId;
   FSessionId: non_empty_string;
   FSessionId_Specified: boolean;
   FService: Service;
   FAction: Action;
   FMessageData: MessageData;
   FDuplicateElimination: WideString;
   FDuplicateElimination_Specified: boolean;
   procedure SetCPAKey(Index: Integer; const Anon_empty_string: non_empty_string);
   function  CPAKey_Specified(Index: Integer): boolean;
   procedure SetSessionId(Index: Integer; const Anon_empty_string: non_empty_string);
   function  SessionId_Specified(Index: Integer): boolean;
   procedure SetDuplicateElimination(Index: Integer; const AWideString: WideString);
   function  DuplicateElimination_Specified(Index: Integer): boolean;
 public
   destructor Destroy; override;
 published
   property From:                 From              Index (IS_REF) read FFrom write FFrom;
   property To_:                  To_               Index (IS_REF) read FTo_ write FTo_;
   property CPAId:                CPAId             Index (IS_REF) read FCPAId write FCPAId;
   property CPAKey:               non_empty_string  Index (IS_OPTN) read FCPAKey write SetCPAKey stored CPAKey_Specified;
   property ConversationId:       ConversationId    Index (IS_REF) read FConversationId write FConversationId;
   property SessionId:            non_empty_string  Index (IS_OPTN) read FSessionId write SetSessionId stored SessionId_Specified;
   property Service:              Service           Index (IS_REF) read FService write FService;
   property Action:               Action            Index (IS_REF) read FAction write FAction;
   property MessageData:          MessageData       Index (IS_REF) read FMessageData write FMessageData;
   property DuplicateElimination: WideString        Index (IS_OPTN) read FDuplicateElimination write SetDuplicateElimination stored DuplicateElimination_Specified;
 end;
---
Как видно - деструктор есть, а конструктора нет.
---
destructor MessageHeader.Destroy;
begin
 FreeAndNil(FFrom);
 FreeAndNil(FTo_);
 FreeAndNil(FService);
 FreeAndNil(FMessageData);
 inherited Destroy;
end;
---
То есть эти "встроенные" объекты автоматом уничтожаются, но не создаются!!!
Почему так? Почему импортер генерит такой код?
---
> Поэтому они все nil
да ну конечно...
Не верите? Проверьте сами ... wsdl я выложил


 
UnDISCOvery   (2008-12-24 15:34) [4]

2 Плохиш:
>> Как быть?
>В спецификации языка делфи написано, что все объекты должны быть >созданы перед использованием.

Да, спецификацию я знаю... не первый год уже.
Мой вопрос не в том - как самому создать объект перед использованием и для чего это нужно, а в том - почему это не делает автоматически утилита WSDL Importer, которая призвана облегчит мне этот рутинный труд.
Думаю, доходчиво уточнил :)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2010.12.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.058 c
15-1282732230
12
2010-08-25 14:30
2010.12.05
Oracle. connect by prior. Порядок возвращения записей


6-1230233588
vad_shesh
2008-12-25 22:33
2010.12.05
Как определить, открыт ли эксель-файл в ЛС


15-1283074778
Кто б сомневался
2010-08-29 13:39
2010.12.05
Bad кластера


15-1283183477
puding
2010-08-30 19:51
2010.12.05
диалоговое окно.


3-1248425517
Анна
2009-07-24 12:51
2010.12.05
импорт данных из MSSQL2000 в MSSQL2005





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский