Date: Thu, 28 Mar 2024 18:45:49 +0000 (UTC)
Message-ID: <928651332.24619.1711651549161@ae5f4610bf64>
Subject: Exported From Confluence
MIME-Version: 1.0
Content-Type: multipart/related;
boundary="----=_Part_24618_1045917891.1711651549160"
------=_Part_24618_1045917891.1711651549160
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///C:/exported.html
On this page:
User Exception Sy=
ntax and Semantics
Looking at the setTime
operation in the Clock
i=
nterface, we find a potential problem: given that the TimeOfDay
structure uses short
as the type of each field, what will ha=
ppen if a client invokes the setTime
operation and passes a TimeOfDay value with meaningless field values, such as -19=
9
for the minute field, or 42
for the hour? Obviously, =
it would be nice to provide some indication to the caller that this is mean=
ingless. Slice allows you to define user exceptions to indicate error condi=
tions to the client. For example:
exception Error {}; // Empty&=
nbsp;exceptions are legal
exception RangeError {
TimeOfDay errorTime;
TimeOfDay minTime;
TimeOfDay maxTime;
};
A user exception is much like a structure in that it contains a number o=
f data members. However, unlike structures, exceptions can have zero data m=
embers, that is, be empty.
Default Valu=
es for User Exception Members
You can specify a default value for an exception data member that has on=
e of the following types:
For example:
exception RangeError {
TimeOfDay errorTime;
TimeOfDay minTime;
TimeOfDay maxTime;
string reason =3D "out of =
range";
};
The legal syntax for literal values is the same as for Slice constants, and you may also use =
a constant as a default value. The language mapping guarantees that data me=
mbers are initialized to their declared default values using a language-spe=
cific mechanism.
Declaring Use=
r Exceptions in Operations
Exceptions allow you to return an arbitrary amount of error information =
to the client if an error condition arises in the implementation of an oper=
ation. Operations use an exception specification to indicate the exceptions=
that may be returned to the client:
interface Clock {
idempotent TimeOfDay getTime();
idempotent void setTime(TimeOfDay ti=
me)
throws RangeError, Error;
};
This definition indicates that the setTime
operation may th=
row either a RangeError
or an Error
user exceptio=
n (and no other type of exception). If the client receives a RangeErr=
or
exception, the exception contains the TimeOfDay
valu=
e that was passed to setTime
and caused the error (in the errorTime member), as well as the minimum and maximum time values =
that can be used (in the minTime
and maxTime
memb=
ers). If setTime
failed because of an error not caused by an i=
llegal parameter value, it throws Error
. Obviously, because Error does not have data members, the client will have no idea w=
hat exactly it was that went wrong =E2=80=94 it simply knows that the opera=
tion did not work.
An operation can throw only those user exceptions that are listed in its=
exception specification. If, at run time, the implementation of an operati=
on throws an exception that is not listed in its exception specification, t=
he client receives a run-tim=
e exception) to indicate that the operation did something illegal. To i=
ndicate that an operation does not throw any user exception, simply omit th=
e exception specification. (There is no empty exception specification in Sl=
ice.)
Restrictions for Us=
er Exceptions
Exceptions are not first-class data types and first-class data types are=
not exceptions:
- You cannot pass an exception as a parameter value.
- You cannot use an exception as the type of a data member.
- You cannot use an exception as the element type of a sequence.
- You cannot use an exception as the key or value type of a dictionary.=
li>
- You cannot throw a value of non-exception type (such as a value of type=
int
or string
).
The reason for these restrictions is that some implementation languages =
use a specific and separate type for exceptions (in the same way as Slice d=
oes). For such languages, it would be difficult to map exceptions if they c=
ould be used as an ordinary data type. (C++ is somewhat unusual among progr=
amming languages by allowing arbitrary types to be used as exceptions.)
User Exception Inheritan=
ce
Exceptions support inheritance. For example:
exception ErrorBase {
string reason;
};
enum RTError {
DivideByZero, NegativeRoot, IllegalNull&n=
bsp;/* ... */
};
exception RuntimeError extends ErrorBase {
RTError err;
};
enum LError { ValueOutOfRange, ValuesInconsistent, =
;/* ... */ };
exception LogicError extends ErrorBase {
LError err;
};
exception RangeError extends LogicError {
TimeOfDay errorTime;
TimeOfDay minTime;
TimeOfDay maxTime;
};
These definitions set up a simple exception hierarchy:
ErrorBase
is at the root of the tree and contains a string=
explaining the cause of the error.
- Derived from
ErrorBase
are RuntimeError
and <=
code>LogicError. Each of these exceptions contains an enumerated val=
ue that further categorizes the error.
- Finally,
RangeError
is derived from LogicError
and reports the details of the specific error.
Setting up exception hierarchies such as this not only helps to create a=
more readable specification because errors are categorized, but also can b=
e used at the language level to good advantage. For example, the Slice C++ =
mapping preserves the exception hierarchy so you can catch exceptions gener=
ically as a base exception, or set up exception handlers to deal with speci=
fic exceptions.
Looking at the exception hierarchy, it is not clear whether, at run time=
, the application will only throw most derived exceptions, such as Ra=
ngeError
, or if it will also throw base exceptions, such as Lo=
gicError
, RuntimeError
, and ErrorBase
. If =
you want to indicate that a base exception, interface, or class is abstract=
(will not be instantiated), you can add a comment to that effect.
Note that, if the exception specification of an operation indicates a sp=
ecific exception type, at run time, the implementation of the operation may=
also throw more derived exceptions. For example:
exception Base {
// ...
};
exception Derived extends Base {
// ...
};
interface Example {
void op() throws Base; &n=
bsp; // May throw Base or Derived
};
In this example, op
may throw a Base
or a Derived exception, that is, any exception that is compatible with =
the exception types listed in the exception specification can be thrown at =
run time.
As a system evolves, it is quite common for new, derived exceptions to b=
e added to an existing hierarchy. Assume that we initially construct client=
s and server with the following definitions:
exception Error {
// ...
};
interface Application {
void doSomething() throws Error;
};
Also assume that a large number of clients are deployed in field, that i=
s, when you upgrade the system, you cannot easily upgrade all the clients. =
As the application evolves, a new exception is added to the system and the =
server is redeployed with the new definition:
exception Error {
// ...
};
exception FatalApplicationError extends Error {
// ...
};
interface Application {
void doSomething() throws Error;
};
This raises the question of what should happen if the server throws a FatalApplicationError from doSomething
. The answer =
depends whether the client was built using the old or the updated definitio=
n:
- If the client was built using the same definition as the server, it sim=
ply receives a
FatalApplicationError
.
- If the client was built with the original definition, that client has n=
o knowledge that
FatalApplicationError
even exists. In this ca=
se, the Ice run time automatically slices the exception to the most-derived=
type that is understood by the receiver (Error
, in this case)=
and discards the information that is specific to the derived part of the e=
xception. (This is exactly analogous to catching C++ exceptions by value =
=E2=80=94 the exception is sliced to the type used in the catch
-clause.)
Exceptions support single inheritance only. (Multiple inheritance would =
be difficult to map into many programming languages.)
See Also
------=_Part_24618_1045917891.1711651549160
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: file:///C:/42d1c41851731792bf0b017d55153c75
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
AAAASUVORK5CYII=
------=_Part_24618_1045917891.1711651549160
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: file:///C:/636ffb57184d35b4dd4630b7850f79ec
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
------=_Part_24618_1045917891.1711651549160--