[omniORB] omniORB3: inserting a User Exception into an Any

Jean Francois Poilpret jfpoilpret@hn.vnn.vn
Sat, 8 Jul 2000 19:56:34 +0700


Hi all,

I'm upgrading my application from omniORB2.8 to 3.0, and I found an =
incompatibility between both versions.

I used to do something like the following:

void f(const CORBA::Exception& exc)
{
    CORBA::Any    temp;
    temp <<=3D exc;
    ...
}

(excerpt from Henning & Vinoski book, used to print the name of a CORBA =
exception which is caught in a generic way (with a catch(const =
CORBA::Exception&) block))

Whenever I caught any CORBA Exception with omniORB 2.8, this function =
worked well.
But with omniORB 3.0, when I caught a CORBA User Exception, I got the =
following message:

    "Error: function to insert the user exception into an Any is not =
available"

And my program aborts (certainly because omniORB throws another =
exception from my catch() block, and I can't catch it (my catch block is =
not coded to handle exceptions thrown from inside it, since this should =
-theoretically- never happen).

This exception seems to happen in =
resolve_initial_references("NameService") or in =
NamingContext::_narrow(), when omniNames is not launched yet. The trace =
given by omniORB is:

>>>>
omniORB: WARNING -- using ORBid omniORB2 (should be omniORB3).
omniORB: strand Ripper: start.
omniORB: gateKeeper is tcpwrapGK 1.0 - based on tcp_wrappers_7.6=20
omniORB: Initialising omniDynamic library.
omniORB: WARNING -- using BOAid omniORB2_BOA (should be omniORB3_BOA).
omniORB: Initialising incoming rope factories.
omniORB: strand Rope::incrRefCount: old value =3D 0
omniORB: strand Rope::incrRefCount: old value =3D 0
omniORB: Creating ref to remote: key<0x4e616d6553657276696365>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id:=20
omniORB: Initial reference `NameService' resolved from configuration =
file.
omniORB: throw COMM_FAILURE from tcpSocketMTfactory.cc:946
omniORB: tcpSocketStrand::~Strand() close socket no. -1
Error: function to insert the user exception into an Any is not =
available
omniORB: throw INTERNAL from dynException.cc:52
omniORB: scavenger : start.
Aborted
<<<<

Is this standard behavior ?
Does the message mean that the insertion function is NOT YET available =
(but will soon be in a future release or pre-release) ?

Regards,

    Jean-Fran=E7ois