[omniORB] CorbaScript on omniORB2 (2)

David Riddoch djr@uk.research.att.com
Tue, 20 Jul 1999 15:38:29 +0100 (GMT)


Hi,


I'm not sure that the spec has anything to say on this subject, but what
you are doing looks like a sensible think to do, so I've modified the ORB
to support it.

However, I'm not doing it in the constructor as you suggested, but in
the attribute accessor.

I've also done the same thing for the 'contexts' attribute.


David




On Tue, 20 Jul 1999 Philippe.Merle@lifl.fr wrote:

> I have another problem in the port of CorbaScript on omniORB2.
> I try to dynamically invoke the Name Service (throught DII).
> 
> Here CorbaScript snapshot:
> 
> unix> cssh
> CorbaScript 1.3.1 (Jul 20 1999) for omniORB2 for C++
> Copyright 1996-99 LIFL, France
> >>> ns = CORBA.ORB.resolve_initial_references("NameService")
> >>> ns
> CosNaming::NamingContext("IOR:... etc etc ...")
> >>> ns.bind([["NS",""]],ns)
> Exception: IDL:omg.org/CORBA/BAD_OPERATION(minor=0,completed=COMPLETED_NO)
> 
>   File "stdin", line 1 in ???
> 
> The problem is in the following constructors of the RequestImpl class:
> 
> RequestImpl::RequestImpl(CORBA::Object_ptr target, const char* operation)
> 
> RequestImpl::RequestImpl(CORBA::Object_ptr target, const char* operation,
> 			 CORBA::Context_ptr context,
> 			 CORBA::NVList_ptr arguments,
> 			 CORBA::NamedValue_ptr result)
> 
> they must initialize the ExceptionList:
> 
>   pd_exceptions  = new ExceptionListImpl;
> 
> Because if I have the following IDL code:
> 
> exception MyException {};
> interface MyInterface {
>   void myOperation() raises(MyException);
> };
> 
> then the following C++ code is correct:
> 
>   CORBA::Object_var object = ...;
>   CORBA::Request_var request = object->_request("myOperation");
>   request->set_return_type(CORBA::_tc_void);
>  
>   request->exceptions()->add(_tc_MyException);
> 
>   request->invoke();
> 
> Currently, as the RequestImpl constructor doesn't initialize the ExceptionList
> then the request->exceptions()->add() call fails!