CORBA::SystemException Class Reference

SystemException. More...

#include <SystemException.h>

Inheritance diagram for CORBA::SystemException:

Inheritance graph
[legend]
Collaboration diagram for CORBA::SystemException:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 SystemException (const SystemException &src)
 Copy constructor.
virtual ~SystemException (void)
 Destructor.
ULong minor (void) const
 Get the minor status.
void minor (ULong m)
 Set the minor status.
CORBA::CompletionStatus completed (void) const
 Get the completion status.
void completed (CORBA::CompletionStatus c)
 Set the operation completion status.
virtual void _raise (void) const =0
void _tao_print_system_exception (FILE *f=stdout) const
virtual ACE_CString _info (void) const
virtual void _tao_encode (TAO_OutputCDR &cdr) const
virtual void _tao_decode (TAO_InputCDR &cdr)
virtual CORBA::Exception_tao_duplicate (void) const
 Deep copy.

Static Public Member Functions

static SystemException_downcast (CORBA::Exception *exception)
 Narrow to a SystemException.
static const SystemException_downcast (const CORBA::Exception *exception)
 The const version of narrow operation to a SystemException.
static CORBA::ULong _tao_minor_code (u_int location, int errno_value)
 Helper to create a minor status value.
static CORBA::ULong _tao_errno (int errno_value)

Protected Member Functions

 SystemException (void)
 Default constructor.
SystemExceptionoperator= (const SystemException &src)
 Assignment operator.
 SystemException (CORBA::ULong code, CORBA::CompletionStatus completed)
 Constructor using a repository id.
 SystemException (const char *repository_id, const char *local_name, CORBA::ULong code, CORBA::CompletionStatus completed)
 Constructor using a repository id.

Static Protected Member Functions

static const char * _tao_get_omg_exception_description (const CORBA::SystemException &exc, CORBA::ULong minor_code)

Private Attributes

CORBA::ULong minor_
 Minor code.
CORBA::CompletionStatus completed_
 Completion status.

Detailed Description

SystemException.

System exceptions are those defined in the CORBA specification; OMG-IDL defines these.

Definition at line 92 of file SystemException.h.


Constructor & Destructor Documentation

CORBA::SystemException::SystemException ( const SystemException 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 90 of file SystemException.cpp.

00091   : CORBA::Exception (src),
00092     minor_ (src.minor_),
00093     completed_ (src.completed_)
00094 {
00095 }

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

Destructor.

Definition at line 97 of file SystemException.cpp.

00098 {
00099 }

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

Default constructor.

Definition at line 66 of file SystemException.cpp.

00067   : minor_ (0),
00068     completed_ (CORBA::COMPLETED_NO)
00069 {
00070 }

CORBA::SystemException::SystemException ( CORBA::ULong  code,
CORBA::CompletionStatus  completed 
) [protected]

Constructor using a repository id.

Definition at line 83 of file SystemException.cpp.

00085   : minor_ (code),
00086     completed_ (completed)
00087 {
00088 }

CORBA::SystemException::SystemException ( const char *  repository_id,
const char *  local_name,
CORBA::ULong  code,
CORBA::CompletionStatus  completed 
) [protected]

Constructor using a repository id.

Definition at line 72 of file SystemException.cpp.

00076   : CORBA::Exception (repository_id,
00077                       local_name),
00078     minor_ (code),
00079     completed_ (completed)
00080 {
00081 }


Member Function Documentation

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

The const version of narrow operation to a SystemException.

Reimplemented from CORBA::Exception.

Definition at line 38 of file SystemException.inl.

00039 {
00040   return dynamic_cast<const CORBA::SystemException *> (exception);
00041 }

ACE_INLINE CORBA::SystemException * CORBA::SystemException::_downcast ( CORBA::Exception exception  )  [static]

Narrow to a SystemException.

Reimplemented from CORBA::Exception.

Definition at line 32 of file SystemException.inl.

Referenced by TAO_ServerRequest::caught_exception(), CORBA::Environment::print_exception(), TAO_GIOP_Message_Base::send_reply_exception(), and TAO_ServerRequest::tao_send_reply_exception().

00033 {
00034   return dynamic_cast<CORBA::SystemException *> (exception);
00035 }

ACE_CString CORBA::SystemException::_info ( void   )  const [virtual]

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

Implements CORBA::Exception.

Definition at line 228 of file SystemException.cpp.

References CORBA::Exception::_rep_id(), _tao_get_omg_exception_description(), completed(), CORBA::COMPLETED_MAYBE, CORBA::COMPLETED_NO, CORBA::COMPLETED_YES, minor(), CORBA::OMGVMCID, ACE_OS::sprintf(), ACE_OS::strerror(), TAO_ACCEPTOR_REGISTRY_OPEN_LOCATION_CODE, TAO_AMH_REPLY_LOCATION_CODE, TAO_CONNECTOR_REGISTRY_NO_USABLE_PROTOCOL, TAO_EACCES_MINOR_CODE, TAO_EAFNOSUPPORT_MINOR_CODE, TAO_EAGAIN_MINOR_CODE, TAO_EBADF_MINOR_CODE, TAO_EBUSY_MINOR_CODE, TAO_ECOMM_MINOR_CODE, TAO_ECONNREFUSED_MINOR_CODE, TAO_ECONNRESET_MINOR_CODE, TAO_EEXIST_MINOR_CODE, TAO_EFAULT_MINOR_CODE, TAO_EINVAL_MINOR_CODE, TAO_EMFILE_MINOR_CODE, TAO_ENFILE_MINOR_CODE, TAO_ENOENT_MINOR_CODE, TAO_ENOMEM_MINOR_CODE, TAO_ENOSYS_MINOR_CODE, TAO_ENOTSUP_MINOR_CODE, TAO_EPERM_MINOR_CODE, TAO_EPIPE_MINOR_CODE, TAO_ETIMEDOUT_MINOR_CODE, TAO_GUARD_FAILURE, TAO_IMPLREPO_MINOR_CODE, TAO_INVOCATION_LOCATION_FORWARD_MINOR_CODE, TAO_INVOCATION_RECV_REQUEST_MINOR_CODE, TAO_INVOCATION_SEND_REQUEST_MINOR_CODE, TAO_MPROFILE_CREATION_ERROR, TAO_ORB_CORE_INIT_LOCATION_CODE, TAO_POA_BEING_DESTROYED, TAO_POA_DISCARDING, TAO_POA_HOLDING, TAO_POA_INACTIVE, TAO_POLICY_NARROW_CODE, TAO_RTCORBA_THREAD_CREATION_LOCATION_CODE, TAO_TIMEOUT_CONNECT_MINOR_CODE, TAO_TIMEOUT_RECV_MINOR_CODE, TAO_TIMEOUT_SEND_MINOR_CODE, TAO_UNHANDLED_SERVER_CXX_EXCEPTION, TAO_UNSPECIFIED_MINOR_CODE, and TAO::VMCID.

00229 {
00230   // @@ there are a few other "user exceptions" in the CORBA scope,
00231   // they're not all standard/system exceptions ... really need to
00232   // either compare exhaustively against all those IDs (yeech) or
00233   // (preferably) to represent the exception type directly in the
00234   // exception value so it can be queried.
00235 
00236   ACE_CString info = "system exception, ID '";
00237   info += this->_rep_id ();
00238   info += "'\n";
00239 
00240   CORBA::ULong const VMCID = this->minor () & 0xFFFFF000u;
00241 
00242   if (VMCID == TAO::VMCID)
00243     {
00244       // @@ Move the following code to a subroutine, it is too long already!
00245       const char *location = 0;
00246       switch (this->minor () & 0x00000F80u)
00247         {
00248         case TAO_INVOCATION_LOCATION_FORWARD_MINOR_CODE:
00249           location = "location forward failed";
00250           break;
00251         case TAO_INVOCATION_SEND_REQUEST_MINOR_CODE:
00252           location = "send request failed";
00253           break;
00254         case TAO_POA_DISCARDING:
00255           location = "poa in discarding state";
00256           break;
00257         case TAO_POA_HOLDING:
00258           location = "poa in holding state";
00259           break;
00260         case TAO_POA_INACTIVE:
00261           location = "poa in inactive state";
00262           break;
00263         case TAO_UNHANDLED_SERVER_CXX_EXCEPTION:
00264           location = "unhandled c++ exception in server side";
00265           break;
00266         case TAO_INVOCATION_RECV_REQUEST_MINOR_CODE:
00267           location = "failed to recv request response";
00268           break;
00269         case TAO_CONNECTOR_REGISTRY_NO_USABLE_PROTOCOL:
00270           location = "all protocols failed to parse the IOR";
00271           break;
00272         case TAO_MPROFILE_CREATION_ERROR:
00273           location = "error during MProfile creation";
00274           break;
00275         case TAO_TIMEOUT_CONNECT_MINOR_CODE:
00276           location = "timeout during connect";
00277           break;
00278         case TAO_TIMEOUT_SEND_MINOR_CODE:
00279           location = "timeout during send";
00280           break;
00281         case TAO_TIMEOUT_RECV_MINOR_CODE:
00282           location = "timeout during recv";
00283           break;
00284         case TAO_IMPLREPO_MINOR_CODE:
00285           location = "implrepo server exception";
00286           break;
00287         case TAO_ACCEPTOR_REGISTRY_OPEN_LOCATION_CODE:
00288           location = "endpoint initialization failure in Acceptor Registry";
00289           break;
00290         case TAO_ORB_CORE_INIT_LOCATION_CODE:
00291           location = "ORB Core initialization failed";
00292           break;
00293         case TAO_POLICY_NARROW_CODE:
00294           location = "Failure when narrowing a Policy";
00295           break;
00296         case TAO_GUARD_FAILURE:
00297           location = "Failure when trying to acquire a guard/monitor";
00298           break;
00299         case TAO_POA_BEING_DESTROYED:
00300           location = "POA has been destroyed or is currently being destroyed";
00301           break;
00302         case TAO_AMH_REPLY_LOCATION_CODE:
00303           location = "Failure when trying to send AMH reply";
00304           break;
00305         case TAO_RTCORBA_THREAD_CREATION_LOCATION_CODE:
00306           location = "Failure in thread creation for RTCORBA thread pool";
00307           break;
00308         default:
00309           location = "unknown location";
00310         }
00311 
00312       const char *errno_indication;
00313       char unknown_errno [255];
00314       CORBA::ULong minor_code = this->minor () & 0x7FU;
00315       switch (minor_code)
00316         {
00317         case TAO_UNSPECIFIED_MINOR_CODE:
00318           errno_indication = "unspecified errno";
00319           break;
00320         case TAO_ETIMEDOUT_MINOR_CODE:
00321           errno_indication = "ETIMEOUT";
00322           break;
00323         case TAO_ENFILE_MINOR_CODE:
00324           errno_indication = "ENFILE";
00325           break;
00326         case TAO_EMFILE_MINOR_CODE:
00327           errno_indication = "EMFILE";
00328           break;
00329         case TAO_EPIPE_MINOR_CODE:
00330           errno_indication = "EPIPE";
00331           break;
00332         case TAO_ECONNREFUSED_MINOR_CODE:
00333           errno_indication = "ECONNREFUSED";
00334           break;
00335         case TAO_ENOENT_MINOR_CODE:
00336           errno_indication = "ENOENT";
00337           break;
00338         case TAO_EBADF_MINOR_CODE:
00339           errno_indication = "EBADF";
00340           break;
00341         case TAO_ENOSYS_MINOR_CODE:
00342           errno_indication = "ENOSYS";
00343           break;
00344         case TAO_EPERM_MINOR_CODE:
00345           errno_indication = "EPERM";
00346           break;
00347         case TAO_EAFNOSUPPORT_MINOR_CODE:
00348           errno_indication = "EAFNOSUPPORT";
00349           break;
00350         case TAO_EAGAIN_MINOR_CODE:
00351           errno_indication = "EAGAIN";
00352           break;
00353         case TAO_ENOMEM_MINOR_CODE:
00354           errno_indication = "ENOMEM";
00355           break;
00356         case TAO_EACCES_MINOR_CODE:
00357           errno_indication = "EACCES";
00358           break;
00359         case TAO_EFAULT_MINOR_CODE:
00360           errno_indication = "EFAULT";
00361           break;
00362         case TAO_EBUSY_MINOR_CODE:
00363           errno_indication = "EBUSY";
00364           break;
00365         case TAO_EEXIST_MINOR_CODE:
00366           errno_indication = "EEXIST";
00367           break;
00368         case TAO_EINVAL_MINOR_CODE:
00369           errno_indication = "EINVAL";
00370           break;
00371         case TAO_ECOMM_MINOR_CODE:
00372           errno_indication = "ECOMM";
00373           break;
00374         case TAO_ECONNRESET_MINOR_CODE:
00375           errno_indication = "ECONNRESET";
00376           break;
00377         case TAO_ENOTSUP_MINOR_CODE:
00378           errno_indication = "ENOTSUP";
00379           break;
00380         default:
00381           {
00382             // 7 bits of some other errno.
00383             ACE_OS::sprintf (unknown_errno,
00384                              "low 7 bits of errno: %3u %s",
00385                              minor_code, ACE_OS::strerror (minor_code));
00386 
00387             errno_indication = unknown_errno;
00388           }
00389         }
00390 
00391       char buffer[BUFSIZ];
00392       ACE_OS::sprintf (buffer,
00393                        "TAO exception, "
00394                        "minor code = %x (%s; %s), "
00395                        "completed = %s\n",
00396                        minor_code,
00397                        location,
00398                        errno_indication,
00399                        (completed () == CORBA::COMPLETED_YES) ? "YES" :
00400                        (completed () == CORBA::COMPLETED_NO) ? "NO" :
00401                        (completed () == CORBA::COMPLETED_MAYBE) ? "MAYBE" :
00402                        "garbage");
00403 
00404       info += buffer;
00405     }
00406   else if (VMCID == CORBA::OMGVMCID)
00407     {
00408       CORBA::ULong const minor_code = this->minor () & 0xFFFU;
00409 
00410       const char *minor_description = 0;
00411 
00412       if (minor_code > 0)
00413           minor_description =
00414             CORBA::SystemException::_tao_get_omg_exception_description (
00415               *this,
00416               minor_code);
00417       else
00418         minor_description = "*unknown description*";
00419 
00420       char buffer[BUFSIZ];
00421       ACE_OS::sprintf (buffer,
00422                        "OMG minor code (%d), "
00423                        "described as '%s', "
00424                        "completed = %s\n",
00425                        minor_code,
00426                        minor_description,
00427                        (completed () == CORBA::COMPLETED_YES) ? "YES" :
00428                        (completed () == CORBA::COMPLETED_NO) ? "NO" :
00429                        (completed () == CORBA::COMPLETED_MAYBE) ? "MAYBE" :
00430                        "garbage");
00431 
00432       info += buffer;
00433     }
00434   else
00435     {
00436       char buffer[BUFSIZ];
00437       ACE_OS::sprintf (buffer,
00438                        "Unknown vendor minor code id (%x), "
00439                        "minor code = %x, completed = %s\n",
00440                        VMCID,
00441                        this->minor (),  // Use the raw minor code
00442                        (completed () == CORBA::COMPLETED_YES) ? "YES" :
00443                        (completed () == CORBA::COMPLETED_NO) ? "NO" :
00444                        (completed () == CORBA::COMPLETED_MAYBE) ? "MAYBE" :
00445                        "garbage");
00446 
00447       info += buffer;
00448     }
00449 
00450   return info;
00451 }

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

Implements CORBA::Exception.

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

void CORBA::SystemException::_tao_decode ( TAO_InputCDR cdr  )  [virtual]

Implements CORBA::Exception.

Definition at line 126 of file SystemException.cpp.

References ACE_InputCDR::read_ulong().

00127 {
00128   // The string is read by the caller, to determine the exact type of
00129   // the exception.  We just decode the fields...
00130   // cdr.read_string (this->id ());
00131   CORBA::ULong tmp;
00132 
00133   if (cdr.read_ulong (this->minor_)
00134       && cdr.read_ulong (tmp))
00135     {
00136       this->completed_ = CORBA::CompletionStatus (tmp);
00137       return;
00138     }
00139 
00140   throw ::CORBA::MARSHAL ();
00141 }

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

Deep copy.

Implements CORBA::Exception.

Definition at line 205 of file SystemException.cpp.

00206 {
00207   return 0;
00208 }

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

Implements CORBA::Exception.

Definition at line 113 of file SystemException.cpp.

References ACE_OutputCDR::write_string(), and ACE_OutputCDR::write_ulong().

00114 {
00115   if (cdr.write_string (this->_rep_id ())
00116       && cdr.write_ulong (this->minor ())
00117       && cdr.write_ulong (this->completed ()))
00118     {
00119       return;
00120     }
00121 
00122   throw ::CORBA::MARSHAL ();
00123 }

CORBA::ULong CORBA::SystemException::_tao_errno ( int  errno_value  )  [static]

Helper to translate a platform-specific errno to a TAO errno value.

Definition at line 144 of file SystemException.cpp.

References EBUSY, ECOMM, ENFILE, ENOSYS, ENOTSUP, TAO_EACCES_MINOR_CODE, TAO_EAFNOSUPPORT_MINOR_CODE, TAO_EAGAIN_MINOR_CODE, TAO_EBADF_MINOR_CODE, TAO_EBUSY_MINOR_CODE, TAO_ECOMM_MINOR_CODE, TAO_ECONNREFUSED_MINOR_CODE, TAO_ECONNRESET_MINOR_CODE, TAO_EEXIST_MINOR_CODE, TAO_EFAULT_MINOR_CODE, TAO_EINVAL_MINOR_CODE, TAO_EMFILE_MINOR_CODE, TAO_ENFILE_MINOR_CODE, TAO_ENOENT_MINOR_CODE, TAO_ENOMEM_MINOR_CODE, TAO_ENOSYS_MINOR_CODE, TAO_ENOTSUP_MINOR_CODE, TAO_EPERM_MINOR_CODE, TAO_EPIPE_MINOR_CODE, TAO_ETIMEDOUT_MINOR_CODE, and TAO_UNSPECIFIED_MINOR_CODE.

Referenced by _tao_minor_code().

00145 {
00146   switch (errno_value)
00147     {
00148     case 0:
00149       return TAO_UNSPECIFIED_MINOR_CODE;
00150     case ETIMEDOUT:
00151       return TAO_ETIMEDOUT_MINOR_CODE;
00152     case ENFILE:
00153       return TAO_ENFILE_MINOR_CODE;
00154     case EPIPE:
00155       return TAO_EPIPE_MINOR_CODE;
00156     case ECONNREFUSED:
00157       return TAO_ECONNREFUSED_MINOR_CODE;
00158     case ENOENT:
00159       return TAO_ENOENT_MINOR_CODE;
00160 
00161 #if !defined (ACE_HAS_WINCE)
00162     case EMFILE:
00163       return TAO_EMFILE_MINOR_CODE;
00164     case EBADF:
00165       return TAO_EBADF_MINOR_CODE;
00166     case EPERM:
00167       return TAO_EPERM_MINOR_CODE;
00168     case EINVAL:
00169       return TAO_EINVAL_MINOR_CODE;
00170 #endif  // ACE_HAS_WINCE
00171 
00172 #if (ENOSYS != EFAULT)
00173     case ENOSYS:
00174       return TAO_ENOSYS_MINOR_CODE;
00175 #endif /* ENOSYS != EFAULT */
00176     case EAFNOSUPPORT:
00177       return TAO_EAFNOSUPPORT_MINOR_CODE;
00178     case EAGAIN:
00179       return TAO_EAGAIN_MINOR_CODE;
00180     case ENOMEM:
00181       return TAO_ENOMEM_MINOR_CODE;
00182     case EACCES:
00183       return TAO_EACCES_MINOR_CODE;
00184     case EFAULT:
00185       return TAO_EFAULT_MINOR_CODE;
00186     case EBUSY:
00187       return TAO_EBUSY_MINOR_CODE;
00188     case EEXIST:
00189       return TAO_EEXIST_MINOR_CODE;
00190     case ECOMM:
00191       return TAO_ECOMM_MINOR_CODE;
00192     case ECONNRESET:
00193       return TAO_ECONNRESET_MINOR_CODE;
00194 #if (ENOTSUP != ENOSYS)
00195     case ENOTSUP:
00196       return TAO_ENOTSUP_MINOR_CODE;
00197 #endif /* ENOSYS != EFAULT */
00198     default:
00199       // Mask off bottom 7 bits and return them.
00200       return errno_value & 0x7FU;
00201     }
00202 }

const char * CORBA::SystemException::_tao_get_omg_exception_description ( const CORBA::SystemException exc,
CORBA::ULong  minor_code 
) [static, protected]

Return the exception description associated with the given OMG minor code.

Definition at line 454 of file SystemException.cpp.

References TAO_BEGIN_VERSIONED_NAMESPACE_DECL::unknown_exception.

Referenced by _info().

00457 {
00458 #ifndef ACE_NDEBUG
00459 
00460   static const char *UNKNOWN_TABLE[] =
00461     {
00462       "Unlisted user exception received by client.",    // 1
00463       "Non-standard SystemException not supported.",    // 2
00464       "An unknown user exception received by a portable interceptor." // 3
00465     };
00466 
00467   static const char *BAD_PARAM_TABLE[] =
00468     {
00469       "Failure to register, unregister, or lookup value factory.", // 1
00470       "RID already defined in IFR.",                               // 2
00471       "Name already used in the context in IFR.",                  // 3
00472       "Target is not a valid container.",                          // 4
00473       "Name clash in inherited context.",                          // 5
00474       "Incorrect type for abstract interface.",                    // 6
00475       "string_to_object conversion failed due to a bad scheme name.", // 7
00476       "string_to_object conversion failed due to a bad address.",  // 8
00477       "string_to_object conversion failed due to a bad schema specific part.",// 9
00478       "string_to_object conversion failed due to non specific reason.", // 10
00479       "Attempt to derive abstract interface from non-abstract base interface in the Interface Repository.", // 11
00480       "Attempt to let a ValueDef support more than one non-abstract interface in the Interface Repository.", // 12
00481       "Attempt to use an incomplete TypeCode as a parameter.",     // 13
00482       "Invalid object id passed to POA::create_reference_by_id.",  // 14
00483       "Bad name argument in TypeCode operation.",                  // 15
00484       "Bad RepositoryId argument in TypeCode operation.",          // 16
00485       "Invalid member name in TypeCode operation.",                 // 17
00486       "Duplicate label value in create_union_tc.",                 // 18
00487       "Incompatible TypeCode of label and discriminator in create_union_tc.", // 19
00488       "Supplied discriminator type illegitimate in create_union_tc.", // 20
00489       "Any passed to ServerRequest::set_exception does not contain an exception.", // 21
00490       "Unlisted user exception passed to ServerRequest::set_exception", // 22
00491       "wchar transmission code set not in service context.",       // 23
00492       "Service context is not in OMG-defined range.",              // 24
00493       "Enum value out of range.",                                  // 25
00494       "Invalid service context Id in portable interceptor.",       // 26
00495       "Attempt to call register_initial_reference with a null Object.", // 27
00496       "Invalid component Id in portable interceptor.",             // 28
00497       "Invalid profile Id in portable interceptor.",               // 29
00498       "Two or more Policy objects with the same PolicyType value supplied to Object::set_policy_overrides or PolicyManager::set_policy_overrides." // 30
00499       "Attempt to define a oneway operation with non-void result, out or inout parameters or user exceptions.", // 31
00500       "DII asked to create request for an implicit operation.",     // 32,
00501       "An OTS/XA integration xa_ call returned XAER_INVAL.",        // 33
00502       "Union branch modifier called with bad case label discriminator.", // 34
00503       "Illegal IDL context property name.",   // 35
00504       "Illegal IDL property search string.",  // 36
00505       "Illegal IDL context name.",            // 37
00506       "Non-empty IDL context.",               // 38
00507       "Unsupported RMI/IDL customer value type stream format.",  // 39
00508       "ORB output stream does not support ValueOutputStream interface.", // 40
00509       "ORB input stream does not support ValueInputStream interface.",    // 41
00510       "Character support limited to ISO 8859-1 for this object reference", // 42
00511       "Attempt to add a Pollable to a second PollableSet." // 43
00512     };
00513 
00514   static const char *IMP_LIMIT_TABLE[] =
00515     {
00516       "Unable to use any profile in IOR." // 1
00517     };
00518 
00519   static const char *INITIALIZE_TABLE[] =
00520     {
00521       "Priority range too restricted for ORB." // 1
00522     };
00523 
00524 
00525   static const char *INV_OBJREF_TABLE[] =
00526     {
00527       "wchar Code Set support not specified.", // 1
00528       "Codeset component required for type using wchar or wstring data." // 2
00529     };
00530 
00531   static const char *MARSHAL_TABLE[] =
00532     {
00533       "Unable to locate value factory.",  // 1
00534       "ServerRequest::set_result called before ServerRequest::ctx when the operation IDL contains a context clause.", // 2
00535       "NVList passed to ServerRequest::arguments does not describe all parameters passed by client.", // 3
00536       "Attempt to marshal Local object.", // 4
00537       "wchar or wstring data erroneously sent by client over GIOP 1.0 connection.", // 5
00538       "wchar or wstring data erroneously returned by server over GIOP 1.0 connection.", //6
00539       "Unsupported RMI/IDL custom value type stream format.", // 7
00540       "Custom data not compatible with ValueHandler read operation.", // 8
00541       "Codeset service contexts with different values recieved on the same connection." // 9
00542 
00543     };
00544 
00545   static const char *BAD_TYPECODE_TABLE[] =
00546     {
00547       "Attempt to marshal incomplete TypeCode.",              // 1
00548       "Member type code illegitimate in TypeCode operation.", // 2
00549       "Illegal parameter type."                               // 3
00550     };
00551 
00552   static const char *NO_IMPLEMENT_TABLE[] =
00553     {
00554       "Missing local value implementation.",        // 1
00555       "Incompatible value implementation version.", // 2
00556       "Unable to use any profile in IOR.",          // 3
00557       "Attempt to use DII on Local object.",        // 4
00558       "Biomolecular Sequence Analysis iterator cannot be reset.",         // 5
00559       "Biomolecular Sequence Analysis metadata is not available as XML.", // 6
00560       "Genomic Maps iterator cannot be rest.",       // 7
00561       "Operation not implemented in local object"   // 8
00562     };
00563 
00564   static const char *NO_RESOURCES_TABLE[] =
00565     {
00566       "Portable Interceptor operation not support in this binding.", // 1
00567       "No connection for request's priority."                        // 2
00568     };
00569 
00570   static const char *BAD_INV_ORDER_TABLE[] =
00571     {
00572       "Dependency exists in IFR preventing destruction of this object", // 1
00573       "Attempt to destroy indestructible objects in IFR.", // 2
00574       "Operation would deadlock.",                         // 3
00575       "ORB has shutdown.",                                 // 4
00576       "Attempt to invoke \"send\" or \"invoke\" operation of the same \"Request\" object more than once.", // 5
00577       "Attempt to set a servant manager after one has already been set.", // 6
00578       "ServerRequest::arguments called more than once or after a call to ServerRequest::set_exception.", // 7
00579       "ServerRequest::ctx called more than once or before ServerRequest::arguments or after ServerRequest::ctx, ServerRequest::set_result or ServerRequest::set_exception.", // 8
00580       "ServerRequest::set_result called more than once or before ServerRequest::arguments or after ServerRequest::set_result or ServerRequest::set_exception.", // 9
00581       "Attempt to send a DII request after it was sent previously.", // 10
00582       "Attempt to poll a DII request or to retrieve its result before the request was sent.", // 11
00583       "Attempt to poll a DII request or to retrieve its result after the result was retrieved previously.", // 12
00584       "Attempt to poll a synchronous DII request or to retrieve results from a synchronous DII request.", // 13
00585       "Invalid portable interceptor call",                 // 14
00586       "Service context add failed in portable interceptor because a service context with the given id already exists.", // 15
00587       "Registration of PolicyFactory failed because a factory already exists for the given type.", // 16
00588       "POA cannot create POAs while undergoing destruction.", // 17
00589       "Attempt to reassign priority.", // 18
00590       "An OTS/XA integration xa_start call returned XAER_OUTSIDE.", // 19
00591       "An OTS/XA integration xa_call returned XAER_PROTO.", // 20
00592       "Transaction context of request & client threads do not match in interceptor.", // 21
00593       "Poller has not returned any response yet.", // 22
00594       "Registration of TaggedProfileFactory failed because a factory already exists for the given id.", // 23
00595       "Registration of TaggedComponentFactory failed because a factory already exists for the given id.", // 24
00596        "Iteration has no more elements.", // 25
00597        "Invocation of this operation not allowed in post_init." // 26
00598 
00599     };
00600 
00601   static const char *TRANSIENT_TABLE[] =
00602     {
00603       "Request discarded because of resource exhaustion in POA, or because POA is in discarding state.", // 1
00604       "No usable profile in IOR.",                            // 2
00605       "Request cancelled.",                                   // 3
00606       "POA destroyed."                                        // 4
00607     };
00608 
00609   static const char *OBJ_ADAPTER_TABLE[] =
00610     {
00611       "System exception in AdapterActivator::unknown_adapter.",              // 1
00612       "Incorrect servant type returned by servant manager",     // 2
00613       "No default servant available [POA policy].",             // 3
00614       "No servant manager available [POA policy].",             // 4
00615       "Violation of POA policy by ServantActivator::incarnate.",// 5
00616       "Exception in PortableInterceptor::IORInterceptor.components_established.", // 6
00617       "Null servant returned by servant manager."               // 7
00618     };
00619 
00620   static const char *DATA_CONVERSION_TABLE[] =
00621     {
00622       "Character does not map to negotiated transmission code set.", // 1
00623       "Failure of PriorityMapping object."                           // 2
00624     };
00625 
00626   static const char *OBJECT_NOT_EXIST_TABLE[] =
00627     {
00628       "Attempt to pass an unactivated (unregistered) value as an object reference.", // 1
00629       "Failed to create or locate Object Adapter.", // 2
00630       "Biomolecular Sequence Analysis Service is no longer available.", // 3
00631       "Object Adapter inactive.", // 4
00632       "This Poller has already delivered a reply to some client." // 5
00633     };
00634 
00635   static const char *INV_POLICY_TABLE[] =
00636     {
00637       "Unable to reconcile IOR specified policy with the effective policy override.", // 1
00638       "Invalid PolicyType.", // 2
00639       "No PolicyFactory has been registered for the given PolicyType." // 3
00640     };
00641 
00642   static const char *ACTIVITY_COMPLETED_TABLE[] =
00643     {
00644       "Activity context completed through timeout, or in some way other then requested." // 1
00645     };
00646 
00647   static const char *ACTIVITY_REQUIRED_TABLE[] =
00648     {
00649       "Calling thread lacks required activity context." // 1
00650     };
00651 
00652   static const char *BAD_OPERATION_TABLE[] =
00653     {
00654       "ServantManager returned wrong servant type.", // 1
00655       "Operation or attribute not known to target object." // 2
00656     };
00657 
00658   static const char *BAD_CONTEXT_TABLE[] =
00659     {
00660       "IDL context not found.", // 1
00661       "No matching IDL context property." // 2
00662     };
00663 
00664   static const char *CODESET_INCOMPATIBLE_TABLE[] =
00665     {
00666       "Codeset negotiation failed.", // 1
00667       "Codeset delivered in CodeSetContext is not supported by server as transmission codeset." // 2
00668     };
00669 
00670   static const char *INTF_REPOS_TABLE[] =
00671     {
00672       "Interface Repository not available.", // 1
00673       "No entry for requested interface in Interface Repository." // 2
00674     };
00675 
00676   if (minor_code == 0)
00677     return "*unknown description*";
00678 
00679   --minor_code;  // Adjust to match table offset.
00680 
00681   CORBA::UNKNOWN const * unknown_exception =
00682     dynamic_cast <const CORBA::UNKNOWN *> (&exc);
00683   if (unknown_exception != 0
00684       && minor_code < sizeof UNKNOWN_TABLE / sizeof (char *))
00685     return UNKNOWN_TABLE[minor_code];
00686 
00687   CORBA::BAD_PARAM const * bad_param__exception =
00688     dynamic_cast <const CORBA::BAD_PARAM *> (&exc);
00689   if (bad_param__exception != 0
00690       && minor_code < sizeof BAD_PARAM_TABLE / sizeof (char *))
00691     return BAD_PARAM_TABLE[minor_code];
00692 
00693   CORBA::IMP_LIMIT const * imp_limit_exception =
00694     dynamic_cast <const CORBA::IMP_LIMIT *> (&exc);
00695   if (imp_limit_exception != 0
00696       && minor_code < sizeof IMP_LIMIT_TABLE / sizeof (char *))
00697     return IMP_LIMIT_TABLE[minor_code];
00698 
00699   CORBA::INITIALIZE const * initialize_exception =
00700     dynamic_cast <const CORBA::INITIALIZE *> (&exc);
00701   if (initialize_exception != 0
00702       && minor_code < sizeof INITIALIZE_TABLE / sizeof (char *))
00703     return INITIALIZE_TABLE[minor_code];
00704 
00705   CORBA::INV_OBJREF const * inv_objref_exception =
00706     dynamic_cast <const CORBA::INV_OBJREF *> (&exc);
00707   if (inv_objref_exception != 0
00708       && minor_code < sizeof INV_OBJREF_TABLE / sizeof (char *))
00709     return INV_OBJREF_TABLE[minor_code];
00710 
00711   CORBA::MARSHAL const * marshal_exception =
00712     dynamic_cast <const CORBA::MARSHAL *> (&exc);
00713   if (marshal_exception != 0
00714       && minor_code < sizeof MARSHAL_TABLE / sizeof (char *))
00715     return MARSHAL_TABLE[minor_code];
00716 
00717   CORBA::BAD_TYPECODE const * bad_typecode_exception =
00718     dynamic_cast <const CORBA::BAD_TYPECODE *> (&exc);
00719   if (bad_typecode_exception != 0
00720       && minor_code < sizeof BAD_TYPECODE_TABLE / sizeof (char *))
00721     return BAD_TYPECODE_TABLE[minor_code];
00722 
00723   CORBA::NO_IMPLEMENT const * no_implement_exception =
00724     dynamic_cast <const CORBA::NO_IMPLEMENT *> (&exc);
00725   if (no_implement_exception != 0
00726       && minor_code < sizeof NO_IMPLEMENT_TABLE / sizeof (char *))
00727     return NO_IMPLEMENT_TABLE[minor_code];
00728 
00729   CORBA::NO_RESOURCES const * no_resource_exception =
00730     dynamic_cast <const CORBA::NO_RESOURCES *> (&exc);
00731   if (no_resource_exception != 0
00732       && minor_code < sizeof NO_RESOURCES_TABLE / sizeof (char *))
00733     return NO_RESOURCES_TABLE[minor_code];
00734 
00735   CORBA::BAD_INV_ORDER const * bad_inv_order_exception =
00736     dynamic_cast <const CORBA::BAD_INV_ORDER *> (&exc);
00737   if (bad_inv_order_exception != 0
00738       && minor_code < sizeof BAD_INV_ORDER_TABLE / sizeof (char *))
00739     return BAD_INV_ORDER_TABLE[minor_code];
00740 
00741   CORBA::TRANSIENT const * transient_exception =
00742     dynamic_cast <const CORBA::TRANSIENT *> (&exc);
00743   if (transient_exception != 0
00744       && minor_code < sizeof TRANSIENT_TABLE / sizeof (char *))
00745     return TRANSIENT_TABLE[minor_code];
00746 
00747   CORBA::OBJ_ADAPTER const * obj_adapter_exception =
00748     dynamic_cast <const CORBA::OBJ_ADAPTER *> (&exc);
00749   if (obj_adapter_exception != 0
00750       && minor_code < sizeof OBJ_ADAPTER_TABLE / sizeof (char *))
00751     return OBJ_ADAPTER_TABLE[minor_code];
00752 
00753   CORBA::DATA_CONVERSION const * data_conversion_exception =
00754     dynamic_cast <const CORBA::DATA_CONVERSION *> (&exc);
00755   if (data_conversion_exception != 0
00756       && minor_code < sizeof DATA_CONVERSION_TABLE / sizeof (char *))
00757     return DATA_CONVERSION_TABLE[minor_code];
00758 
00759   CORBA::OBJECT_NOT_EXIST const * object_not_exist_exception =
00760     dynamic_cast <const CORBA::OBJECT_NOT_EXIST *> (&exc);
00761   if (object_not_exist_exception != 0
00762       && minor_code < sizeof OBJECT_NOT_EXIST_TABLE / sizeof (char *))
00763     return OBJECT_NOT_EXIST_TABLE[minor_code];
00764 
00765   CORBA::INV_POLICY const * inv_policy_exception =
00766     dynamic_cast <const CORBA::INV_POLICY *> (&exc);
00767   if (inv_policy_exception != 0
00768       && minor_code < sizeof INV_POLICY_TABLE / sizeof (char *))
00769     return INV_POLICY_TABLE[minor_code];
00770 
00771   CORBA::ACTIVITY_COMPLETED const * activity_completed_exception =
00772     dynamic_cast <const CORBA::ACTIVITY_COMPLETED *> (&exc);
00773   if (activity_completed_exception != 0
00774       && minor_code < sizeof ACTIVITY_COMPLETED_TABLE / sizeof (char *))
00775     return ACTIVITY_COMPLETED_TABLE[minor_code];
00776 
00777   CORBA::ACTIVITY_REQUIRED const * activity_required_exception =
00778     dynamic_cast <const CORBA::ACTIVITY_REQUIRED *> (&exc);
00779   if (activity_required_exception != 0
00780       && minor_code < sizeof ACTIVITY_REQUIRED_TABLE / sizeof (char *))
00781     return ACTIVITY_REQUIRED_TABLE[minor_code];
00782 
00783   CORBA::BAD_OPERATION const * bad_operation_exception =
00784     dynamic_cast <const CORBA::BAD_OPERATION *> (&exc);
00785   if (bad_operation_exception != 0
00786       && minor_code < sizeof BAD_OPERATION_TABLE / sizeof (char *))
00787     return BAD_OPERATION_TABLE[minor_code];
00788 
00789   CORBA::BAD_CONTEXT const * bad_context_exception =
00790     dynamic_cast <const CORBA::BAD_CONTEXT *> (&exc);
00791   if (bad_context_exception != 0
00792       && minor_code < sizeof BAD_CONTEXT_TABLE / sizeof (char *))
00793     return BAD_CONTEXT_TABLE[minor_code];
00794 
00795   CORBA::CODESET_INCOMPATIBLE const * codeset_incompatible_exception =
00796     dynamic_cast <const CORBA::CODESET_INCOMPATIBLE *> (&exc);
00797   if (codeset_incompatible_exception != 0
00798       && minor_code < sizeof CODESET_INCOMPATIBLE_TABLE / sizeof (char *))
00799     return CODESET_INCOMPATIBLE_TABLE[minor_code];
00800 
00801   CORBA::INTF_REPOS const * intf_repos_exception =
00802     dynamic_cast <const CORBA::INTF_REPOS *> (&exc);
00803   if (intf_repos_exception != 0
00804       && minor_code < sizeof INTF_REPOS_TABLE / sizeof (char *))
00805     return INTF_REPOS_TABLE[minor_code];
00806 
00807 #else
00808   ACE_UNUSED_ARG (exc);
00809   ACE_UNUSED_ARG (minor_code);
00810 #endif  /* !ACE_NDEBUG */
00811 
00812   return "*unknown description*";
00813 }

CORBA::ULong CORBA::SystemException::_tao_minor_code ( u_int  location,
int  errno_value 
) [static]

Helper to create a minor status value.

Definition at line 211 of file SystemException.cpp.

References _tao_errno(), and TAO::VMCID.

Referenced by CORBA::Object::_key(), CORBA::Object::_set_policy_overrides(), TAO_Profile::addressing_mode(), TAO_Thread_Lane_Resources::connector_registry(), CORBA::ORB::create_context_list(), CORBA::ORB::create_environment(), TAO::find_orb_context(), CORBA::ORB::get_default_context(), CORBA::ORB::get_next_response(), CORBA::ORB::get_service_information(), TAO::Invocation_Adapter::get_stub(), TAO_ORB_Core::init(), TAO::Profile_Transport_Resolver::init_inconsistent_policies(), TAO::LocateRequest_Invocation_Adapter::invoke(), TAO::Invocation_Adapter::invoke_twoway(), TAO::Synch_Twoway_Invocation::location_forward(), TAO_CORBALOC_Parser::make_canonical(), TAO_Connector::make_mprofile(), TAO_Connector_Registry::make_mprofile(), TAO_IIOP_Connector::make_profile(), TAO::LocateRequest_Invocation_Adapter::object_forwarded(), TAO::Invocation_Adapter::object_forwarded(), CORBA::ORB::object_to_string(), TAO_Acceptor_Registry::open(), TAO_Acceptor_Registry::open_i(), CORBA::ORB_init(), TAO_Profile::parse_string(), TAO_DLL_Parser::parse_string(), TAO_IIOP_Profile::parse_string_i(), CORBA::ORB::poll_next_response(), TAO_GIOP_Message_Base::process_request(), TAO_Service_Callbacks::raise_comm_failure(), TAO_Service_Callbacks::raise_transient_failure(), TAO_Transport::send_asynchronous_message_i(), TAO::Remote_Invocation::send_message(), CORBA::ORB::send_multiple_requests_deferred(), CORBA::ORB::send_multiple_requests_oneway(), TAO_Transport::send_synchronous_message_i(), TAO_ORB_Core::service_raise_comm_failure(), TAO_ORB_Core::set_endpoint_helper(), CORBA::ORB::string_to_object(), TAO::Profile_Transport_Resolver::try_connect_i(), CORBA::ORB::url_ior_string_to_object(), TAO_Profile::verify_orb_configuration(), TAO_Profile::verify_profile_version(), and TAO::Synch_Twoway_Invocation::wait_for_reply().

00212 {
00213   return
00214     TAO::VMCID
00215     | location
00216     | _tao_errno (errno_value);
00217 }

void CORBA::SystemException::_tao_print_system_exception ( FILE *  f = stdout  )  const

Print the system exception ex to output determined by f. This function is not CORBA compliant.

Definition at line 220 of file SystemException.cpp.

References ACE_ERROR, ACE_TEXT, ACE_TEXT_CHAR_TO_TCHAR, and LM_ERROR.

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

00221 {
00222   ACE_ERROR ((LM_ERROR,
00223               ACE_TEXT("(%P|%t) system exception, ID '%s'\n"),
00224               ACE_TEXT_CHAR_TO_TCHAR (this->_info ().c_str ())));
00225 }

ACE_INLINE void CORBA::SystemException::completed ( CORBA::CompletionStatus  c  ) 

Set the operation completion status.

Definition at line 26 of file SystemException.inl.

References completed_.

00027 {
00028   this->completed_ = c;
00029 }

ACE_INLINE CORBA::CompletionStatus CORBA::SystemException::completed ( void   )  const

Get the completion status.

Definition at line 20 of file SystemException.inl.

References completed_.

Referenced by _info(), and TAO::Synch_Twoway_Invocation::handle_system_exception().

00021 {
00022   return this->completed_;
00023 }

ACE_INLINE void CORBA::SystemException::minor ( ULong  m  ) 

Set the minor status.

Definition at line 14 of file SystemException.inl.

References minor_.

00015 {
00016   this->minor_ = m;
00017 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE CORBA::ULong CORBA::SystemException::minor ( void   )  const

Get the minor status.

Definition at line 8 of file SystemException.inl.

References minor_.

Referenced by _info(), and TAO::Synch_Twoway_Invocation::handle_system_exception().

00009 {
00010   return this->minor_;
00011 }

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

Assignment operator.

Definition at line 102 of file SystemException.cpp.

References completed_, minor_, and CORBA::Exception::operator=().

00103 {
00104   this->Exception::operator= (src);
00105 
00106   this->minor_ = src.minor_;
00107   this->completed_ = src.completed_;
00108 
00109   return *this;
00110 }


Member Data Documentation

CORBA::CompletionStatus CORBA::SystemException::completed_ [private]

Completion status.

Definition at line 181 of file SystemException.h.

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

CORBA::ULong CORBA::SystemException::minor_ [private]

Minor code.

Definition at line 178 of file SystemException.h.

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


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