У меня есть сервер C++ CORBA, который реализует интерфейс, выдающий пользовательское исключение.
Я легко могу поймать конкретное исключение, когда клиент и сервер реализованы на C++ (проверено с использованием как TAO orb, так и omniORB).
Но когда я вызываю тот же метод из Erlang (используя orber), исключение появляется как общее исключение, а не как определенное пользователем исключение.
Чтобы проверить это, я просто использовал простой IDL -
interface Messenger {
exception cirrus_error{
short error_code;
string error_desc;
};
boolean send_message(in string user_name,
in string subject,
inout string message) raises (cirrus_error);
};
Если и сервер, и клиент находятся на С++, я получаю исключение (для тестирования я закодировал его, чтобы всегда выдавать исключение пользователя)
CORBA exception: cirrus_error (IDL:Messenger/cirrus_error:1.0)
Но при вызове через Erlang - получаю -
** exception throw: {'EXCEPTION',{'UNKNOWN',[],1330446337,'COMPLETED_MAYBE'}}
in function corba:raise/1
Нужно ли мне делать что-то особенное при указании приложения Orber, чтобы обеспечить правильное поведение?
Редактировать. Вот как я вызываю сервер из erlang.
В приглашении Erlang это то, что я делаю:
1> orber:jump_start().
2> O = corba:string_to_object(IORStr).
3> 'Messenger':send_message(O, "s", "t", "f").
** exception throw: {'EXCEPTION',{'UNKNOWN',[],1330446337,'COMPLETED_MAYBE'}}
in function corba:raise/1