G.8. ExceptionsYou can define exceptions in IDL, which are used to signal errors or other unusual circumstances that may occur during a remote method call. Exceptions are declared with a unique name and an optional set of data attributes: // IDL exception identifier { <data member>; <data member>; ...}; Each data member on the exception type is simply a type specification followed by a unique identifier for the data member. The data is used to provide the caller with additional information about what went wrong during the remote method call. Using our geometric examples from earlier, we might define an exception that is thrown when a MultiCoord with unexpected dimensions is passed into a method: // IDL exception BadDimension { short expected; short passed; }; The server object raising one of these exceptions can set these data values, and the client making the request can read these values to interpret what went wrong. Exceptions can be declared within any module or interface scope in your IDL file. G.8.1. Standard ExceptionsIn addition to user-defined exceptions, a set of standard exceptions is defined within the CORBA module. These standard exceptions can be raised by any method, even though they aren't listed explicitly in the method definition. These exceptions can be referenced in IDL using the CORBA:: scope (e.g., CORBA::BAD_PARAM). The standard CORBA exceptions are listed in Table G-4. Every standard CORBA exception includes two data members: an unsigned long minor error code, which can further specify the type of error that occurred, and a completion_status enum that can be one of COMPLETED_YES, COMPLETED_NO, and COMPLETED_MAYBE. These status values indicate that before the exception was raised, the method was either completed, was never initiated, or is in an unknown state, respectively.
G.8.2. Mapping Exceptions to JavaUser-defined exceptions are mapped to public final Java classes that extend org.omg.CORBA.UserException, which is derived directly from java.lang.Exception. Otherwise, the exception is mapped to Java in the same way as structs, as described previously. Each data member is mapped to a public data member of the corresponding type, and a set of constructors is defined for the exception class. |