如何使ORB服务器返回IOR而不是GIOP消息?

时间:2014-01-13 16:16:04

标签: java corba

叫我疯了,但我正在尝试为传统的CORBA客户端编写单元测试。为了模拟服务器,我正在启动一个ORB守护进程和一个虚拟ORB服务器(在不同的线程中)。客户端配置了名称服务URL。最初,服务的检索方式如下:

String url = "localhost:1050";
String ior = getIOR(url); // first line (until '\n') returned from the URL
org.omg.CORBA.Object localObject = getORB().string_to_object(ior);
NamingContext namingService = NamingContextHelper.narrow(localObject);

这对我没用,所以我不得不改为:

Properties props = new Properties();
props.put("org.omg.CORBA.ORBInitialHost", "localhost");
props.put("org.omg.CORBA.ORBInitialPort", "1050");
ORB orb = ORB.init(new String[0], props);
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContext namingService = NamingContextHelper.narrow(objRef);

差异归结为在工作测试中使用string_to_object vs resolve_initial_references。问题是:如何让我的虚拟ORB服务器像客户期望的那样返回IOR(纯文本)?目前,它不是IOR而是以GIOP格式返回消息。我应该翻转服务器上的开关吗?

1 个答案:

答案 0 :(得分:0)

我想你在这里有一些误解。 IOR是CORBA对象的引用,而当您要求ORB对其承载的CORBA对象执行某些操作时,会获得GIOP消息。

在第一个代码段中,您使用localhost:1050 NOT 任何CORBA对象的引用(可能就在ORB正在等待对其对象的请求的位置)。第二个片段正常工作,因为您正在使用返回对CORBA对象的引用的本机初始引用解析。在获得对命名上下文的引用后,您可以使用object_to_string来获取IOR(引用的字符串表示)。