当前页面: 开发资料首页 → J2EE 专题 → CORBA:: IDL中后一个interface的一个函数,用前一个interface作为参数是否可以
CORBA:: IDL中后一个interface的一个函数,用前一个interface作为参数是否可以
摘要: CORBA:: IDL中后一个interface的一个函数,用前一个interface作为参数是否可以
例如IDL中间定义了两个interface A和B
B中间有一个Function(in A a)使用了A作为参数
Server端用Class ◎实现Interface A,继承A的POA
从Client端调用Function的时候将一个在client端的◎作为参数传入
(这里应该是一个通过interface A拿到的Class ◎的Stub)
在server端,能拿到A,要如何才能让他转换成◎ (◎是继承A的POA)
从而做◎所需要的工作?
类型强转
(◎) A
的话,我这边会暴出Java.Lang.ClassCastException
看lz的调用逻辑有点混乱啊,能贴一小部分代码出来看么?
恩,
/*IDL file*/
interface SBObj
{
void func1(in wstring a);
};
interface Deal
{
void openQuery(in SBObj SBO,
in wstring Name) raises (UserDefinedException)
}
/*Server Side*/
public class SBObject extends SBObjPOA
{
public void func1(String a)
{
}
}
public class DealImpl extends DealPOA
{
public void openQuery(SBObj SBO,String Name)
{
/*here need to convert from SBObj to SBObject*/
}
}
//在code里面 SBObj,SBObjPOA,DealPOA等都是idl2java生成出来的
我理解lz的意思是服务器还要当客户端使用,客户端也还是一个服务器.这样肯定可以实现(我实现过)
可以尝试一下**Helper.narrow()方法试一下.
narrow方法的返回值,类型只是SBObj类型
而这个类型,我已经可以得到了,作为openQuery的参数
idl2java自动生成了
我想要得到的是SBObject类型,是SBObjPOA的子类
我现在的问题就是
我通过corba在client端获得了一个server端的映射
当我把它作为参数传回去server端的时候
server端能不能认出来,这个就是原来我给出去的那个class
对他能做什么操作
这个没有尝试过,也不知道能不能实现,帮你定一下了只能.
well...
这个问题最终找到了解决的方法
用相关的poa的reference_to_servant方法,可是转换
作为一个总结
不知道lz是否还关注
想看下调用reference_to_servant附近5行的代码,不知可否?