Ошибка с приведением в ZeroC ICE

Я генерирую классы ZeroC через свой файл льда. На нем есть два класса: класс "Device" и DeviceServer, который является просто массивом первого. Этот массив формируется DevicePrx, но проблема возникает, когда я хочу привести первый класс для построения массива. Это приложение Ice.Application для сервера:

 public class Server extends Ice.Application {
  public int run(String[] args) {
    shutdownOnInterrupt();

    Ice.ObjectAdapter oa = communicator().createObjectAdapter("Servidor");
    Ice.ObjectPrx prx1 = oa.add(new DeviceI("descripción", DeviceStatus.DEVICEON), Ice.Util.stringToIdentity("Device1"));
    Ice.ObjectPrx prx2 = oa.add(new DeviceI("descripción2", DeviceStatus.DEVICEON), Ice.Util.stringToIdentity("Device2")); 

    DevicePrx [] oprx = new DevicePrx[2];

    oprx[0] = (DevicePrxHelper) prx2;
    DeviceServerI ds = new DeviceServerI(oprx);

    System.out.println(communicator().proxyToString(prx1) + " \n"+communicator().proxyToString(prx2));
    oa.activate(); 

    communicator().waitForShutdown();

    return 0;
  }

Этот актерский состав не работает. Когда я выполняю класс, он показывает эту ошибку:

!! 15/11/14 11: 58: 37: 119 Servidor: ошибка: главная: неизвестно исключение: java.lang.ClassCastException: Ice.ObjectPrxHelperBase не может быть приведен к ITSUE.DevicePrxHelper в Server.run(Server.java:13) на льду.Application.doMain(Application.java:214) на Ice.Application.main(Application.java:194) на Ice.Application.main(Application.java:71) на Server.main(Server.java:26)

Вопрос заключается в следующем: как я могу привести объект устройства для создания массива?

ICE файл:

module ITSUE {
   enum DeviceStatus {
     DEVICEON,
     DEVICEOFF
   };
  class Device {
         ["private"] string description;
         ["private"] DeviceStatus status;

        void setStatus(DeviceStatus ns);
        DeviceStatus getStatus();       

        string getDescription();

        void on();
        void off();
  };
  sequence<Device *> DeviceSeq;
  class DeviceServer {
     ["private"] DeviceSeq devices;
     DeviceSeq listDevices();
  };
};

Большое спасибо!

1 ответ

Решение

Я решаю свой вопрос самостоятельно. Если у кого-то есть такая же проблема, вы должны привести в действие с помощью метода checkedCast или uncheckedCast из класса XXXXPrxHelper. В моем случае: DevicePrxHelper.checkedCast()

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