Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: ActiveX/СОМ/CORBA > SOAP, Embarcadero и полиморфизм |
Автор: AnTeml 23.10.2014, 11:37 | ||||||||||||
Здравствуйте. сервер на JAVA (WebLogic 10.3.6) пишу клиента на Embarcadero XE5 Столкнулся со следующей проблемой. Серверная логика запрограммирована с мыслью о полиморфизме, то есть процедура объявлена как принимающая абстрактный объект-прародитель, а передают в неё конкретные объекты и внутри процедуры, в зависимости от типа переданной переменной, с нею совершаются определённые действия На практике при передаче объекта-наследника на сервер приходит в реальности объект-прародитель На всякий случай, попробую привести пример: Имеется структура классов, унаследованная, пусть для определённости от TAbstractObject и у сервера есть процедура RegisteredAnyObject, принимающая на вход объект любого типа Родительский класс:
объявление серверной процедуры:
Пример использования
При таком использовании на сервере в процедуру RegisteredAnyObject приходит объект типа TAbstractObject, соответственно, помимо потери информации о типе при передаче потеряны и поля NewField1, NewField2 Но это ещё не всё. Если один из объектов имеет в качестве поля другой объект и ему вместо в это поле подсовывается предок объявленного объекта - на сервере в этом поле точно так же приходит экземпляр не присвоенного присвоенный полю объекта, а его родителя то есть, на примерах в продолжении предыдущего примера, составной объект:
сервис
использование:
Результат: на сервер приходит объект типа TComplexObject, в поле obj которого содержится переменная типа TAbstractObject Для тестирования сервера приложений был написан клиент на Java, содержащий пакет тестов сервисов. Всё превосходно передавалось и принималось. Когда начали разработку рабочего клиента на Embarcadero (с использованием HTTPRIO) - получилась такая засада. Предполагаю, что не указаны какие-то настройки формирования XML-пакета, так же предполагаю, что поддержка полиморфизма - базовый функционал и ну не может быть такого, чтобы в HTTPRIO это не было реализовано. Но куда копать? |