Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SOAP, Embarcadero и полиморфизм, в SOAP не работает полиморфизм 
:(
    Опции темы
AnTeml
Дата 23.10.2014, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Здравствуйте.

сервер на JAVA (WebLogic 10.3.6)

пишу клиента на Embarcadero XE5

Столкнулся со следующей проблемой. Серверная логика запрограммирована с мыслью о полиморфизме, то есть процедура объявлена как принимающая абстрактный объект-прародитель, а передают в неё конкретные объекты и внутри процедуры, в зависимости от типа переданной переменной, с нею совершаются определённые действия

На практике при передаче объекта-наследника на сервер приходит в реальности объект-прародитель

На всякий случай, попробую привести пример:

Имеется структура классов, унаследованная, пусть для определённости от TAbstractObject и у сервера есть процедура RegisteredAnyObject, принимающая на вход объект любого типа

Родительский класс:
Код

TAbstractObject = class
end;



объявление серверной процедуры:
Код

RegisteredAnyObject(Obj: TAbstractObject);



Пример использования
Код

TConcreteObject = class(TAbstractObject)
  NewField1: integer;
  NewField2: integer;
end;

UsingObject := TConcreteObject.Create;

RegisteredAnyObject(UsingObject);



При таком использовании на сервере в процедуру RegisteredAnyObject приходит объект типа TAbstractObject, соответственно, помимо потери информации о типе при передаче потеряны и поля NewField1, NewField2

Но это ещё не всё. 

Если один из объектов имеет в качестве поля другой объект и ему вместо в это поле подсовывается предок объявленного объекта - на сервере в этом поле точно так же приходит экземпляр не присвоенного присвоенный полю объекта, а его родителя


то есть, на примерах в продолжении предыдущего примера, составной объект:
Код

TComplexObject = class
obj: TAbstractObject
end;


сервис
Код

ServiceForComplexObject(obj: TComplexObject);


использование:
Код

ComplexObject := TComplexObject.Create;
ComplexObject.obj := TConcreteObject.Create

ServiceForComplexObject(ComplexObject);



Результат: на сервер приходит объект типа TComplexObject, в поле obj которого содержится переменная типа TAbstractObject

Для тестирования сервера приложений был написан клиент на Java, содержащий пакет тестов сервисов. Всё превосходно передавалось и принималось. 

Когда начали разработку рабочего клиента на Embarcadero (с использованием HTTPRIO) - получилась такая засада.

Предполагаю, что не указаны какие-то настройки формирования XML-пакета, так же предполагаю, что поддержка полиморфизма - базовый функционал и ну не может быть такого, чтобы в HTTPRIO это не было реализовано.

Но куда копать?

Это сообщение отредактировал(а) AnTeml - 23.10.2014, 11:40
PM MAIL   Вверх
drkot
Дата 14.11.2014, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: нет
Всего: 8



Цитата(AnTeml @  23.10.2014,  12:37 Найти цитируемый пост)
Но куда копать?

извините, но для начала в ДНК...
Судя по тексту Вы не имеете представления об Object Pascal как языке и средствах отладки предоставляемых средой разработки.

Цитата(AnTeml @  23.10.2014,  12:37 Найти цитируемый пост)
объявление серверной процедуры:код Pascal/Delphi1:RegisteredAnyObject(Obj: TAbstractObject);

Какой тип объекта вы ожидаете при входе в процедуру?


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Google
  Дата 27.5.2019, 06:04 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0987 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.