As in the case of Ice objects, a Dynamic Ice application may represent user exceptions in a native format that is not directly compatible with the Ice API. If the application needs to raise such a user exception to the Ice run time (so that it will be marshaled and sent back to the client), the exception must be wrapped in a subclass of Ice::UserException
. The Dynamic Ice API provides a class to simplify this process:
{zcode:cpp} namespace Ice { class UserExceptionWriter : public UserException { public: UserExceptionWriter(const CommunicatorPtr&); virtual void write(const OutputStreamPtr&) const = 0; virtual bool usesClasses() const = 0; virtual std::string ice_name() const = 0; virtual Ice::Exception* ice_clone() const = 0; virtual void ice_throw() const = 0; // ... }; typedef ... UserExceptionWriterPtr; } {zcode} |
A subclass of UserExceptionWriter
is responsible for supplying a communicator to the constructor, and for implementing the following methods:
void write(const OutputStreamPtr&) const
bool usesClasses() const
std::string ice_name() const
Ice::Exception* ice_clone() const
void ice_throw() const
throw *this
.