CORBA::Exception Class Reference

Exception. More...

#include <Exception.h>

Inheritance diagram for CORBA::Exception:

Inheritance graph
[legend]
List of all members.

Public Member Functions

 Exception (const Exception &src)
 Copy constructor.
virtual ~Exception (void)
 Destructor.
virtual void _raise (void) const =0
virtual const char * _rep_id (void) const
 Return the repository ID of the Exception.
virtual const char * _name (void) const
 Return the name of the Exception.
virtual CORBA::TypeCode_ptr _tao_type (void) const =0
 Will be overridden in the concrete derived classes.
void _tao_print_exception (const char *info, FILE *f=stdout) const
 Print the exception to output determined by f.
virtual ACE_CString _info (void) const =0
virtual void _tao_encode (TAO_OutputCDR &cdr) const =0
virtual void _tao_decode (TAO_InputCDR &cdr)=0
virtual CORBA::Exception_tao_duplicate (void) const =0
 Deep copy.

Static Public Member Functions

static Exception_downcast (Exception *x)
static Exception const * _downcast (Exception const *x)
static void _tao_any_destructor (void *)
 Used in the non-copying Any insertion operator.

Protected Member Functions

 Exception (void)
 Default constructor.
Exceptionoperator= (const Exception &src)
 Assignment operator.
 Exception (const char *repository_id, const char *local_name)
 Construct from a respository id.

Private Attributes

CORBA::String_var id_
 Repository Id.
CORBA::String_var name_
 Local name.

Detailed Description

Exception.

CORBA2-specified exception hierarchy. All exceptions have a type (represented by a TypeCode) and a widely scoped type ID (in the TypeCode) that are generated by any OMG-IDL compiler and available through the Interface Repository. Think of it as a "globally scoped" name distinguishing each exception.

Todo:
According to the OMG CORBA C++ Mapping version 1.1, the copy constructors should be moved to "protected" section in class declarations. Since the current MS Visual C++ 7.1 compiler will cause some problems to TAO's exception mechanism, we defer doing this until we drop support for MSVC++ 7.1. Maybe there is another solution, have to test that later.

Definition at line 99 of file Exception.h.


Constructor & Destructor Documentation

CORBA::Exception::Exception ( const Exception src  ) 

Copy constructor.

Note:
This constructor should be protected, but VC7.1 at warning level 4 complains about the inaccessible copy constructor preventing it from being caught. However, that probably isn't true for most cases since CORBA exceptions are typically caught by reference, not by copy.

Definition at line 45 of file Exception.cpp.

References ACE_ASSERT, and name_.

00046   : id_ (CORBA::string_dup (src.id_)),
00047     name_ (CORBA::string_dup (src.name_))
00048 {
00049   ACE_ASSERT (this->id_.in () != 0 && this->name_.in () != 0);
00050 }

CORBA::Exception::~Exception ( void   )  [virtual]

Destructor.

Definition at line 62 of file Exception.cpp.

00063 {
00064 }

CORBA::Exception::Exception ( void   )  [protected]

Default constructor.

Definition at line 56 of file Exception.cpp.

00057   : id_ (),
00058     name_ ()
00059 {
00060 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL CORBA::Exception::Exception ( const char *  repository_id,
const char *  local_name 
) [protected]

Construct from a respository id.

Definition at line 37 of file Exception.cpp.

References ACE_ASSERT.

00039   : id_ (CORBA::string_dup (repository_id)),
00040     name_ (CORBA::string_dup (local_name))
00041 {
00042   ACE_ASSERT (this->id_.in () != 0 && this->name_.in () != 0);
00043 }


Member Function Documentation

ACE_INLINE CORBA::Exception const * CORBA::Exception::_downcast ( Exception const *  x  )  [static]

Reimplemented in CORBA::PolicyError, CORBA::InvalidPolicies, CORBA::SystemException, CORBA::UserException, and CORBA::WrongTransaction.

Definition at line 14 of file Exception.inl.

00015 {
00016   return x;
00017 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE CORBA::Exception * CORBA::Exception::_downcast ( Exception x  )  [static]

Reimplemented in CORBA::ORB::InvalidName, CORBA::PolicyError, CORBA::InvalidPolicies, CORBA::SystemException, CORBA::UserException, and CORBA::WrongTransaction.

Definition at line 8 of file Exception.inl.

00009 {
00010   return x;
00011 }

virtual ACE_CString CORBA::Exception::_info ( void   )  const [pure virtual]

Returns a string containing information about the exception. This function is not CORBA compliant.

Implemented in CORBA::SystemException, and CORBA::UserException.

const char * CORBA::Exception::_name ( void   )  const [virtual]

Return the name of the Exception.

Definition at line 85 of file Exception.cpp.

References name_.

Referenced by CORBA::operator<<().

00086 {
00087   return this->name_.in ();
00088 }

virtual void CORBA::Exception::_raise ( void   )  const [pure virtual]

Implemented in CORBA::ORB::InvalidName, CORBA::PolicyError, CORBA::InvalidPolicies, CORBA::SystemException, CORBA::UserException, and CORBA::WrongTransaction.

Referenced by TAO::Synch_Twoway_Invocation::handle_user_exception().

const char * CORBA::Exception::_rep_id ( void   )  const [virtual]

Return the repository ID of the Exception.

Definition at line 79 of file Exception.cpp.

References id_.

Referenced by CORBA::UserException::_info(), CORBA::SystemException::_info(), CORBA::Environment::exception_id(), CORBA::Environment::exception_type(), TAO_Operation_Details::has_exception(), operator<<(), CORBA::operator<<(), and CORBA::Environment::print_exception().

00080 {
00081   return this->id_.in ();
00082 }

void CORBA::Exception::_tao_any_destructor ( void *   )  [static]

Used in the non-copying Any insertion operator.

Reimplemented in CORBA::PolicyError, CORBA::InvalidPolicies, and CORBA::WrongTransaction.

Definition at line 114 of file Exception.cpp.

00115 {
00116   CORBA::Exception *tmp = static_cast<CORBA::Exception *> (x);
00117   delete tmp;
00118 }

virtual void CORBA::Exception::_tao_decode ( TAO_InputCDR cdr  )  [pure virtual]

Implemented in CORBA::ORB::InvalidName, CORBA::PolicyError, CORBA::InvalidPolicies, CORBA::SystemException, and CORBA::WrongTransaction.

Referenced by TAO::Synch_Twoway_Invocation::handle_user_exception().

virtual CORBA::Exception* CORBA::Exception::_tao_duplicate ( void   )  const [pure virtual]

Deep copy.

The following operation is used in the implementation of it performs a deep copy of the exception, normally it is implemented as:

 class SomeException : public // Derives from CORBA::Exception
 {
 public:
   virtual CORBA::Exception *_tao_duplicate (void) const
   {
     CORBA::Exception *result = 0;
     ACE_NEW_RETURN (
         result,
         SomeException (*this),
         0
       );
     return result;
   }
 };
 

Implemented in CORBA::ORB::InvalidName, CORBA::PolicyError, CORBA::InvalidPolicies, CORBA::SystemException, and CORBA::WrongTransaction.

Referenced by CORBA::Environment::Environment().

virtual void CORBA::Exception::_tao_encode ( TAO_OutputCDR cdr  )  const [pure virtual]

Implemented in CORBA::ORB::InvalidName, CORBA::PolicyError, CORBA::InvalidPolicies, CORBA::SystemException, and CORBA::WrongTransaction.

Referenced by TAO_GIOP_Message_Base::generate_exception_reply().

void CORBA::Exception::_tao_print_exception ( const char *  info,
FILE *  f = stdout 
) const

Print the exception to output determined by f.

Note:
This method is TAO-specific.

Definition at line 91 of file Exception.cpp.

References ACE_ERROR, ACE_TEXT, ACE_TEXT_CHAR_TO_TCHAR, and LM_ERROR.

Referenced by TAO_GIOP_Message_Base::process_request().

00093 {
00094   ACE_ERROR ((LM_ERROR,
00095               ACE_TEXT ("(%P|%t) EXCEPTION, %s\n")
00096               ACE_TEXT ("%s\n"),
00097               ACE_TEXT_CHAR_TO_TCHAR (user_provided_info),
00098               ACE_TEXT_CHAR_TO_TCHAR (this->_info ().c_str ())));
00099 }

virtual CORBA::TypeCode_ptr CORBA::Exception::_tao_type ( void   )  const [pure virtual]

Will be overridden in the concrete derived classes.

Implemented in CORBA::PolicyError, CORBA::InvalidPolicies, CORBA::UserException, and CORBA::WrongTransaction.

CORBA::Exception & CORBA::Exception::operator= ( const Exception src  )  [protected]

Assignment operator.

Definition at line 67 of file Exception.cpp.

References ACE_ASSERT, id_, name_, and CORBA::string_dup().

Referenced by CORBA::UserException::operator=(), and CORBA::SystemException::operator=().

00068 {
00069   this->id_ = CORBA::string_dup (src.id_);
00070   ACE_ASSERT (this->id_.in () != 0);
00071 
00072   this->name_ = CORBA::string_dup (src.name_);
00073   ACE_ASSERT (this->name_.in () != 0);
00074 
00075   return *this;
00076 }


Member Data Documentation

CORBA::String_var CORBA::Exception::id_ [private]

Repository Id.

Definition at line 199 of file Exception.h.

Referenced by _rep_id(), and operator=().

CORBA::String_var CORBA::Exception::name_ [private]

Local name.

Definition at line 202 of file Exception.h.

Referenced by _name(), Exception(), and operator=().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:39:56 2010 for TAO by  doxygen 1.4.7