Documentation for Ice 3.4. The latest release is Ice 3.7. Refer to the space directory for other releases.

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:

C++
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;
}

A subclass of UserExceptionWriter is responsible for supplying a communicator to the constructor, and for implementing the following methods:

  • void write(const OutputStreamPtr&) const
    This method is invoked when the Ice run time is ready to marshal the exception. The subclass must marshal the exception using the encoding rules for exceptions.
  • bool usesClasses() const
    Return true if the exception, or any base exception, contains a data member that is an object by value.
  • std::string ice_name() const
    Return the Slice name of the exception.
  • Ice::Exception* ice_clone() const
    Return a copy of the exception.
  • void ice_throw() const
    Raise the exception by calling throw *this.
See Also
  • No labels