打電話給我瘋了,但我正在嘗試爲舊的CORBA客戶端編寫單元測試。爲了模擬服務器,我啓動了一個ORB守護進程和一個虛擬ORB服務器(在不同的線程中)。客戶端配置了一個名稱服務URL。原來,該服務獲取這樣的:如何使ORB服務器返回IOR而不是GIOP消息?
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格式的消息。我應該翻轉服務器上是否有交換機?
getIOR函數有什麼作用?那是什麼'str'是'string_to_object'的參數? –
您的CORBA客戶端需要一個真正的IOR,因此您的虛擬服務器必須向客戶端提供真正的IOR。這可以通過創建一個真正的CORBA服務器來測試你的客戶端來完成,你不能僅僅創建一個文本字符串並且假定一個現有的CORBA客戶端來接受它。 –
'getIOR'從URL中讀取字節,直到遇到'\ n'(第一行)並從它們創建一個字符串。 'str'應該是'ior',我的不好,固定在問題上。 – zaza