生成的Skel方法缺少Tao_idl中的异常声明

时间:2013-12-01 14:41:59

标签: exception corba idl ace tao-framework

我在IDL(test.idl)文件中有一个方法:

bool login(in string name, in string cipher) raises (AuthenticationException);

AuthenticationException在我的IDL文件中声明为异常。然后我使用tao_idl生成具有以下参数的骨架:

-Wb,stub_export_macro=BASE_STUB_Export -Wb,stub_export_include=base_stub_export.h -Wb,skel_export_macro=BASE_SKEL_Export -Wb,skel_export_include=base_skel_export.h -GC

但是,testS.h中生成的登录方法如下:

virtual ::project::UserContext * login (
  const char * name,
  const char * cipher) = 0;

和testI.h:

virtual
 ::project::UserContext * login (
  const char * name,
  const char * cipher);

这对我来说很奇怪。因为方法声明缺少AuthenticationException异常。我相信这个方法应该是这样的:                    login(..)throw(AuthenticationException) 在业务逻辑中抛出自定义异常而不是CORBA标准异常,客户端存根可以捕获这些异常。

我的tao_idl参数有问题吗?

1 个答案:

答案 0 :(得分:1)

不,您的tao_idl参数没有任何问题,这就是定义IDL到C ++映射的方式。旧版本的IDL到C ++确实在C ++中使用了异常规范,但是最近的版本却没有,请参阅可以从http://www.omg.org/spec/CPP获得的OMG IDL到C ++映射。

IDL到C ++ 11语言映射也不使用异常规范,这个更现代的C ++语言映射也可以从OMG获得,请参阅http://www.omg.org/spec/CPP11

你的IDL方法和生成的签名不匹配,IDL到C ++ 11你的IDL中的登录方法(带有布尔返回类型)看起来像

virtual bool login (const std::string& name, const std::string& cipher) = 0;