Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2014, 06:58   #1
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию SOAP и полиморфизм

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

сервер на 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

Фишка в том, что сервер приложений тестировался на Java, то есть для тестирования сервера приложений был написан клиент, содержащий пакет тестов сервисов, и написан он на Java. Всё превосходно передавалось и принималось. Когда клиент написан на Embarcadero с использованием HTTPRIO - в функцию приходит урезанный объект-родитель

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

Но куда копать?
AnTe вне форума Ответить с цитированием
Старый 23.10.2014, 07:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наверное мне повезло, что у меня нет такой задачи.
Я бы долго голову ломал с этими соапами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2014, 10:49   #3
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Это ещё не всё.

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


то есть, на примерах в продолжении предыдущей задачи, составной объект:
Цитата:
TComplexObject = class
obj: TAbstractObject
end;
сервис
Код:
ServiceForComplexObject(obj: TComplexObject);
использование:

Код:
ComplexObject := TComplexObject.Create;
ComplexObject.obj := TConcreteObject.Create

ServiceForComplexObject(ComplexObject);
на сервер приходит объект типа TComplexObject, в поле obj которого содержится переменная типа TAbstractObject
AnTe вне форума Ответить с цитированием
Старый 23.10.2014, 11:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я могу только пособолезновать твоей проблеме.
Увы ответов у меня нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2014, 12:08   #5
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Спасибо. Мне стало легче
AnTe вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qt SOAP bumb Qt и кроссплатформенное программирование С/С++ 5 13.03.2013 13:37
SOAP vprsc C# (си шарп) 0 06.12.2012 00:17
SOAP 1.2 C++ korolcov C/C++ Сетевое программирование 0 02.11.2012 14:08
SOAP + PHP kostet PHP 2 17.06.2010 11:55