我有一个 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);
};
如果服务器和客户端都在 C++ 中 - 我得到的异常是(为了测试我将它编码为总是抛出用户异常)
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