BAD_PARAM в java CORBA
Я сталкиваюсь с ошибкой BAD_PARAM, когда я программирую программу чата клиент-сервер на Java. Первый сегмент кода - Сервер
//Server.java
try {
ORB orb = ORB.init(args, null);
POA poa = POAHelper.narrow(orb
.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
ServerImpl s = new ServerImpl(port);
System.out.println(port);
org.omg.CORBA.Object obj = poa.servant_to_reference(s);
Server r = ServerHelper.narrow(obj);
// get reference to root naming context
org.omg.CORBA.Object ns = orb
.resolve_initial_references("NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ns);
// bind the Object Reference in Naming
String name = "Chat";
NameComponent path[] = nc.to_name(name);
nc.rebind(path, r);
System.out.println("Waiting for clients ... ");
orb.run();
} catch (Exception e) {
e.printStackTrace();
}
И это моя сторона клиента
//Client.java
try {
ORB orb = ORB.init(args, null);
// get reference to root naming context
org.omg.CORBA.Object ns = orb
.resolve_initial_references("NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ns);
// lookup name
String name = "Chat";
org.omg.CORBA.Object obj = nc.resolve_str(name);
Client c = ClientHelper.narrow(obj);
} catch (Exception e) {
//System.err.println(e.getMessage());
e.printStackTrace();
}
Я уже запустил свой orbd и Server.java. Все хорошо, кроме Клиента. Ошибка: org.omg.BAD_PARAM vmcid 0x0 второстепенный код: 0 выполнено: нет, и это происходит в строке Client c = ClientHelper.narrow(obj);
Я боролся с этой ошибкой в течение 3 дней. Любые предложения, чтобы это исправить? Спасибо, я очень ценю вашу помощь!
1 ответ
Проблема в том, что вы связываете Server
объект в службу имен в коде вашего сервера, но затем ваш клиентский код пытается сузить это до Client
тип. Эти типы несовместимы.
Измените свой код клиента, чтобы сделать это вместо этого:
Server s = ServerHelper.narrow(obj);
Вам не нужны два отдельных интерфейса IDL для клиента и сервера. Просто создайте тот, который реализует сервер, и пусть клиент вызовет его.