Я не могу понять, почему клиент продолжает жаловаться на то, что не нашел заводской метод. Я пробовал IDL с ключевым словом "factory" и без него, и это не изменило его поведение. IDL SDMGeoVT соответствует другим используемым объектам (которые успешно работают).
Сгенерированные классы SDMGeoVT соответствуют другим сгенерированным классам в отношении наследования и методов.
IDL выглядит следующим образом; Компилятор idlj работает без ошибок. Я реализую эту функцию на сервере и вижу, как выполняется серверный код, и сериализует объект по сети (серверный код работает нормально).
Клиентские бомбы со следующей трассировкой стека (первая пара строк из библиотеки jacORB).
Я создал небольшое приложение для компиляции и тестирования кода (ArrayClient & ArrayServer). Базовое приложение (из демонстрации jacORB) работает нормально.
Я попытался использовать базовый класс OFBaseVT и один объект (SDMGeoVT против возврата списка) и имею ту же проблему.
2010-05-27 15:37:11.813 FINE read GIOP message of size 100 from ClientGIOPConnection to 127.0.0.1:47030 (1e4853f)
2010-05-27 15:37:11.813 FINE read GIOP message of size 100 from ClientGIOPConnection to 127.0.0.1:47030 (1e4853f)
org.omg.CORBA.MARSHAL: No factory found for: IDL:pl/SDMGeoVT:1.0
at org.jacorb.orb.CDRInputStream.read_untyped_value(CDRInputStream.java:2906)
at org.jacorb.orb.CDRInputStream.read_typed_value(CDRInputStream.java:3082)
at org.jacorb.orb.CDRInputStream.read_value(CDRInputStream.java:2679)
at com.helloworld.pl.SDMGeoVTHelper.read(SDMGeoVTHelper.java:106)
at com.helloworld.pl.SDMGeoVTListHelper.read(SDMGeoVTListHelper.java:51)
at com.helloworld.pl._PLManagerIFStub.getSDMGeos(_PLManagerIFStub.java:28)
at com.helloworld.ArrayClient.<init>(ArrayClient.java:40)
at com.helloworld.ArrayClient.main(ArrayClient.java:125)
valuetype SDMGeoVT : common::OFBaseVT{
private string sdmName;
private string zip;
private string atz;
private long long primaryDeptId;
private string deptName;
factory instance(in string name,in string ZIP,in string ATZ,in long long primaryDeptId,in string deptName,in string name);
string getZIP();
void setZIP(in string ZIP);
string getATZ();
void setATZ(in string ATZ);
long long getPrimaryDeptId();
void setPrimaryDeptId(in long long primaryDeptId);
string getDeptName();
void setDeptName(in string deptName);
};
typedef sequence<SDMGeoVT> SDMGeoVTList;
interface PLManagerIF : PublicManagerIF {
pl::SDMGeoVTList getSDMGeos(in framework::ITransactionHandle tHandle, in long long productionLocationId);
};
РЕДАКТИРОВАТЬ: Изменение IDL для структуры по сравнению с типом значения работает.
Ранее я создал новый интерфейс, и это не удалось с той же проблемой.
Редактировать: Да, также обновлен сервер. Код сервера и клиента является одной и той же кодовой базой. Я должен положить в сценарий муравья, который создает оба набора; опции -fall и -ftie.
Редактировать: (10 июня) Сузили его до слишком сложной структуры, созданной первоначальными сборщиками (программист обслуживания, да!). В одном из «супервизоров» необходимо выполнить вызов.