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 для клиента и сервера. Просто создайте тот, который реализует сервер, и пусть клиент вызовет его.

Другие вопросы по тегам