Public Member Functions | Protected Member Functions | Private Attributes

TAO::ExceptionHolder Class Reference

#include <ExceptionHolder_i.h>

Inheritance diagram for TAO::ExceptionHolder:
Inheritance graph
[legend]
Collaboration diagram for TAO::ExceptionHolder:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ExceptionHolder (void)
 ExceptionHolder (::CORBA::Boolean is_system_exception,::CORBA::Boolean byte_order, const ::CORBA::OctetSeq &marshaled_exception,::TAO::Exception_Data *data,::CORBA::ULong exceptions_count, ACE_Char_Codeset_Translator *char_translator, ACE_WChar_Codeset_Translator *wchar_translator)
void set_exception_data (::TAO::Exception_Data *data,::CORBA::ULong exceptions_count)
virtual void raise_exception (void)
virtual void raise_exception_with_list (const ::Dynamic::ExceptionList &exc_list)
virtual CORBA::ValueBase_copy_value (void)

Protected Member Functions

virtual ~ExceptionHolder (void)

Private Attributes

TAO::Exception_Data * data_
CORBA::ULong count_
ACE_Char_Codeset_Translatorchar_translator_
ACE_WChar_Codeset_Translatorwchar_translator_

Detailed Description

Definition at line 45 of file ExceptionHolder_i.h.


Constructor & Destructor Documentation

TAO::ExceptionHolder::ExceptionHolder ( void   ) 

Definition at line 6 of file ExceptionHolder_i.cpp.

               : ExceptionHolder_i.cpp 88517 2010-01-13 08:54:34Z johnnyw $")

#include "tao/Messaging/Messaging.h"
#include "tao/Exception_Data.h"
#include "tao/CDR.h"

TAO::ExceptionHolder::ExceptionHolder ( ::CORBA::Boolean  is_system_exception,
::CORBA::Boolean  byte_order,
const ::CORBA::OctetSeq &  marshaled_exception,
::TAO::Exception_Data *  data,
::CORBA::ULong  exceptions_count,
ACE_Char_Codeset_Translator char_translator,
ACE_WChar_Codeset_Translator wchar_translator 
)

Definition at line 14 of file ExceptionHolder_i.cpp.

{
  ExceptionHolder::ExceptionHolder (void) :
    data_ (0),
    count_ (0),
    char_translator_ (0),
    wchar_translator_ (0)
  {
  }

  ExceptionHolder::ExceptionHolder (
      ::CORBA::Boolean is_system_exception,
      ::CORBA::Boolean byte_order,

TAO::ExceptionHolder::~ExceptionHolder ( void   )  [protected, virtual]

Definition at line 30 of file ExceptionHolder_i.cpp.

                                                      :
        ::OBV_Messaging::ExceptionHolder (is_system_exception, byte_order, marshaled_exception),


Member Function Documentation

CORBA::ValueBase * TAO::ExceptionHolder::_copy_value ( void   )  [virtual]

Definition at line 133 of file ExceptionHolder_i.cpp.

    {
      // todo convert exceptionlist to something we can really use.
      this->raise_exception ();
    }

  CORBA::ValueBase*
  ExceptionHolder::_copy_value (void)
  {
    TAO::ExceptionHolder* ret_val = 0;
    ACE_NEW_THROW_EX (ret_val,

void TAO::ExceptionHolder::raise_exception ( void   )  [virtual]

Definition at line 42 of file ExceptionHolder_i.cpp.

  {
  }

  void
  ExceptionHolder::set_exception_data (::TAO::Exception_Data* data,
                                       ::CORBA::ULong exceptions_count)
  {
    this->data_ = data;
    this->count_ = exceptions_count;
  }

  void ExceptionHolder::raise_exception (void)
    {
      TAO_InputCDR _tao_in ((const char*) this->marshaled_exception ().get_buffer (),
                            this->marshaled_exception ().length (),
                            this->byte_order ());

      _tao_in.char_translator (this->char_translator_);
      _tao_in.wchar_translator (this->wchar_translator_);

      CORBA::String_var type_id;

      if (!(_tao_in >> type_id.inout ()))
        {
          // Could not demarshal the exception id, raise a local
          // CORBA::MARSHAL
          throw ::CORBA::MARSHAL (TAO::VMCID, CORBA::COMPLETED_YES);
        }

      if (this->is_system_exception ())
        {
          CORBA::ULong minor = 0;
          CORBA::ULong completion = 0;
          if (!(_tao_in >> minor) ||
              !(_tao_in >> completion))
            {
              throw ::CORBA::MARSHAL (TAO::VMCID, CORBA::COMPLETED_MAYBE);
            }

          CORBA::SystemException* exception =
            TAO::create_system_exception (type_id.in ());

          if (!exception)
            {
              // @@ We should raise a CORBA::NO_MEMORY, but we ran out
              //    of memory already. We need a pre-allocated, TSS,
              //    CORBA::NO_MEMORY instance
              ACE_NEW (exception, CORBA::UNKNOWN);
            }
          exception->minor (minor);
          exception->completed (CORBA::CompletionStatus (completion));

          // Raise the exception.
          ACE_Auto_Basic_Ptr<CORBA::SystemException> e_ptr(exception);
          exception->_raise ();

          return;
        }

      // Match the exception interface repository id with the
      // exception in the exception list.
      // This is important to decode the exception.
      for (CORBA::ULong i = 0; i != this->count_; ++i)
        {
          if (ACE_OS::strcmp (type_id.in (), this->data_[i].id) != 0)
            continue;

          CORBA::Exception * const exception = this->data_[i].alloc ();

          if (exception == 0)
            {
              throw ::CORBA::NO_MEMORY (TAO::VMCID, CORBA::COMPLETED_YES);
            }
          else
            {
              exception->_tao_decode (_tao_in);
            }

          // Raise the exception.
          ACE_Auto_Basic_Ptr<CORBA::Exception> e_ptr (exception);
          exception->_raise ();

void TAO::ExceptionHolder::raise_exception_with_list ( const ::Dynamic::ExceptionList &  exc_list  )  [virtual]

Definition at line 125 of file ExceptionHolder_i.cpp.

void TAO::ExceptionHolder::set_exception_data ( ::TAO::Exception_Data *  data,
::CORBA::ULong  exceptions_count 
)

Definition at line 35 of file ExceptionHolder_i.cpp.

  {
  }


Member Data Documentation

ACE_Char_Codeset_Translator* TAO::ExceptionHolder::char_translator_ [private]

Definition at line 78 of file ExceptionHolder_i.h.

CORBA::ULong TAO::ExceptionHolder::count_ [private]

Definition at line 77 of file ExceptionHolder_i.h.

TAO::Exception_Data* TAO::ExceptionHolder::data_ [private]

Definition at line 76 of file ExceptionHolder_i.h.

ACE_WChar_Codeset_Translator* TAO::ExceptionHolder::wchar_translator_ [private]

Definition at line 79 of file ExceptionHolder_i.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines