
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __org_omg_CORBA_WrongTransactionHolder__
#define __org_omg_CORBA_WrongTransactionHolder__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class TypeCode;
          class WrongTransaction;
          class WrongTransactionHolder;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
    }
  }
}

class org::omg::CORBA::WrongTransactionHolder : public ::java::lang::Object
{

public:
  WrongTransactionHolder();
  WrongTransactionHolder(::org::omg::CORBA::WrongTransaction *);
  void _read(::org::omg::CORBA::portable::InputStream *);
  void _write(::org::omg::CORBA::portable::OutputStream *);
  ::org::omg::CORBA::TypeCode * _type();
  ::org::omg::CORBA::WrongTransaction * __attribute__((aligned(__alignof__( ::java::lang::Object)))) value;
  static ::java::lang::Class class$;
};

#endif // __org_omg_CORBA_WrongTransactionHolder__
